[AH2017/HNOI2017] 礼物

12人阅读 评论(0) 收藏 举报
分类:

题目描述:

没有.

题目分析:

先不考虑C
那么 Ans=mini=1n(xi+kyi)2=i=1n(xi2+yi2)2maxi=1nxi+kyi
后面那个式子如何快速统计呢?
Yi=yni+1
Ansi=1n(xi2+yi2)2maxi=1nxi+kYni+1
就是个卷积的形式了,上FFT即可统计
考虑把C加上去
nc2+2ci=1n(xiyi)
只要从-m到m枚举C求最小值即可

题目链接:

BZOJ 4827
Luogu 3723

Ac 代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
const int maxm=51000*12;
const double PI=std::acos(-1); 
struct complex{
    double real,imag;
    complex(){};
    complex(double _real,double _imag):real(_real),imag(_imag){}
};
inline complex operator + (complex x,complex y)
{
    return (complex){x.real+y.real,x.imag+y.imag};
}
inline complex operator - (complex x,complex y)
{
    return (complex){x.real-y.real,x.imag-y.imag};
} 
inline complex operator * (complex x,complex y)
{
    return (complex){x.real*y.real-x.imag*y.imag,x.real*y.imag+x.imag*y.real};
}
int rev[maxm];
inline void FFT(complex *a,int n,int f)
{
    for(int i=0;i<n;i++) if(i<rev[i]) std::swap(a[i],a[rev[i]]);
    for(int i=1;i<n;i<<=1)
    {
        complex wn=(complex){std::cos(PI/i),f*std::sin(PI/i)};
        for(int j=0;j<n;j+=(i<<1))
        {
            complex w=(complex){1,0};
            for(int k=0;k<i;k++,w=(w*wn))
            {
                complex x=a[j+k],y=a[i+j+k]*w;
                a[j+k]=x+y,a[i+j+k]=x-y;
            }
        }
    }
    if(f==-1) for(int i=0;i<n;i++) a[i].real/=n;
}
complex A[maxm],B[maxm];
int n,m,c,len;
int main()
{
    int suma,sumb,s1,s2;
    suma=sumb=s1=s2=0;
    scanf("%d%d",&n,&c);
    for(int i=0,x;i<n;i++)
    {
        scanf("%d",&x);
        s1+=x*x,suma+=x;
        A[i].real=A[i+n].real=(double)x;
    }
    for(int i=n-1,x;i>=0;i--)
    {
        scanf("%d",&x);
        s2+=x*x,sumb+=x;
        B[i].real=(double)x;    
    }
    for(m=1;m<=3*n;m<<=1) len++;
    for(int i=0;i<m;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(len-1));
    FFT(A,m,1),FFT(B,m,1);
    for(int i=0;i<m;i++) A[i]=A[i]*B[i];
    FFT(A,m,-1);
    int ans=-1e9+7;
    for(int i=0;i<n;i++)
     ans=std::max((int)round(A[n-1+i].real),ans);
    int Ans=1e9+7;
    for(int i=-c;i<=c;i++)
     Ans=std::min(Ans,s1+s2+n*i*i-2*i*(suma-sumb)-2*ans);
    printf("%d\n",Ans);
    return 0;
}
查看评论

洛谷P3722 [AH2017/HNOI2017]影魔

题目背景影魔,奈文摩尔,据说有着一个诗人的灵魂。 事实上,他吞噬的诗人灵魂早已成千上万。千百年来,他收集了各式各样的灵魂,包括诗人、 牧师、 帝王、 乞丐、 奴隶、 罪人,当然,还有英雄。题目描述每一...
  • yangrui2002
  • yangrui2002
  • 2018-03-25 23:38:40
  • 33

[HNOI2017]礼物gift

题目大意给出两个长度都为nn的数环,环上第ii个位置的数分别是x_i}x_i}和yiy_i,(1≤xi,yi≤m)(1 \leq x_i,y_i \leq m).定义两个数环的差异值为∑i=0n−1(...
  • u012298116
  • u012298116
  • 2017-04-21 18:37:32
  • 249

bzoj 4827: [Hnoi2017]礼物 (FFT)

题目描述传送门题目大意:给出两个串,可以旋转和整串权值增加c,求操作后最小的∑ni=1(xi−yi)2\sum_{i=1}^n (x_i-y_i)^2题解先考虑不增加c。 ∑ni=1(xi−yi)2...
  • clover_hxy
  • clover_hxy
  • 2017-06-12 08:31:36
  • 178

bzoj4827: [Hnoi2017]礼物

看到要求∑(xi − y i+k -c )2的最小值。首先将xi − y i+k看作整体,得到一个关于c的二次函数nc^2+pc+q=0。发现q的形式将y数组翻转类似一个卷积,然后又发现其中每个值小于...
  • Miao_zc
  • Miao_zc
  • 2017-04-18 20:34:49
  • 659

[FFT] BZOJ 4827 [Hnoi2017]礼物

直接把∑ai+y−bi+x\sum a_i+y-b_{i+x}展开 只有∑ai∗bi+x\sum a_i*b_{i+x}比较难求 直接FFT就好了#include #include #include...
  • u014609452
  • u014609452
  • 2017-04-20 06:48:00
  • 570

洛谷 P3723 [AH/HNOI2017]礼物(bzoj P4827 [Hnoi2017]礼物)

当初省选时看这题一脸懵逼,打了70分的代码事实满分还是很容易的(啪啪啪,自己wa了十次还说容易?? 好了说下题解吧,这题就是求循环卷积,我的代码是0~n-1,式子是1~n(主要是博主FFT习惯写0~n...
  • Leo_Riddle
  • Leo_Riddle
  • 2017-07-15 00:26:52
  • 205

BZOJ4827 [Hnoi2017]礼物

假设我们循环移动了x位,并另所有点都加了y,那么这时候的答案就是sigma (a[i+x]-b[i]+y)^2 把上式展开,发现除了一项-2*a[i+x]*b[i]外,要么是常数项,要么是关于y的一...
  • neither_nor
  • neither_nor
  • 2017-04-17 15:11:54
  • 1059

洛谷3724 [AH2017/HNOI2017]大佬

标签:单调栈,DP,hash,决策单调性 题目 题目传送门 题目描述 人们总是难免会碰到大佬。他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得...
  • qwerty1125
  • qwerty1125
  • 2018-03-05 21:57:07
  • 87

[AH/HNOI2017]礼物

推推公式,即求Σni=1(xi+k−yi+c)2最小,c范围为[−m,m]推推公式,即求\Sigma^{n}_{i=1} (x_{i+k}-y_i+c)^2最小,c范围为[-m, m] 拆开,就是Σ...
  • oi_Konnyaku
  • oi_Konnyaku
  • 2018-01-02 19:08:48
  • 105

bzoj 4827 [Hnoi2017]礼物

FFT+枚举
  • chai_jing
  • chai_jing
  • 2017-05-14 10:40:37
  • 192
    个人资料
    持之以恒
    等级:
    访问量: 6万+
    积分: 7015
    排名: 4144
    文章分类
    最新评论