• 链接

  • 首先,两个手环增加非负整数亮度,等于其中一个增加一个整数亮度,可以为负。

  • 令增加量为\(x\),旋转以后的原数列为,那么在不考虑转圈圈的情况下,现在的费用就是:

\[\sum_{i=1}^n\left(a_i+x-b_i\right)^2
\]

\[\sum_{i=1}^na_i^2+\sum_{i=1}^nb_i^2+nx^2+2x\left(\sum_{i=1}^na_i-\sum_{i=1}^nb_i\right)-2\sum_{i=1}^na_ib_i
\]

  • 前面两个是确定的,后面是\(y=ax^2+bx+c\)的形式,那么\(x=\frac{b}{-2a}\)。
  • 所以只需要使得\(\sum a_i*b_i\)最大即可。
  • 直接做不好做,翻转\(a\):

\[\sum_{i=1}^na_{n-i+1}b_i
\]

  • 这不是一个卷积吗~
  • 把\(b\)倍长后,其中卷起来后的每一项都对应了一种反转方案,直接\(fft\)后取最小值。
  • 然后把前面的不变项加上,就是答案了。
#include<bits/stdc++.h>
#define R register int
#define db double
#define il inline
#define ll long long
using namespace std;
const int N=1000000;
const db pi=acos(-1.0);
int n,m,x,nw,pik,a[N],b[N];ll ans;
il int gi(){
R x=0,k=1;char c=getchar();
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')k=-1,c=getchar();
while(c<='9'&&c>='0')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
il int sqr(R x){return x*x;}
namespace FFT{
int m,lim=1,er,Mx=-2e9,rd[N];
struct G{
db x,y;
G (db xx=0,db yy=0){x=xx,y=yy;}
}x[N],y[N];
G operator + (G a,G b){return G(a.x+b.x,a.y+b.y);}
G operator - (G a,G b){return G(a.x-b.x,a.y-b.y);}
G operator * (G a,G b){return G(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void fft(G *A,R op){
for(R i=0;i<lim;++i)if(i<rd[i])swap(A[i],A[rd[i]]);
for(R mid=1;mid<lim;mid<<=1){
G Wn(cos(pi/mid),op*sin(pi/mid));
for(R len=mid<<1,j=0;j<lim;j+=len){
G W(1,0);
for(R k=0;k<mid;++k,W=W*Wn){
G x=A[j+k],y=W*A[j+k+mid];
A[j+k]=x+y,A[j+k+mid]=x-y;
}
}
}
}
ll sol(){
reverse(a+1,a+n+1),m=n+n;
for(R i=0;i<n;++i)x[i].x=a[i+1],y[i].x=b[i+1];
for(R i=n;i<n+n;++i)y[i]=y[i-n];
while(lim<=n+m)lim<<=1,er++;
for(R i=0;i<lim;++i)rd[i]=(rd[i>>1]>>1)|((i&1)<<(er-1));
fft(x,1),fft(y,1);
for(R i=0;i<lim;++i)x[i]=x[i]*y[i];
fft(x,-1);
for(R i=0;i<lim;++i)Mx=max(Mx,(int)(x[i].x/lim+0.5));
return Mx;
}
}
int main(){
n=gi(),m=gi();
for(R i=1;i<=n;++i)a[i]=gi(),ans+=sqr(a[i]),x-=a[i];
for(R i=1;i<=n;++i)b[i]=gi(),ans+=sqr(b[i]),x+=b[i];
nw=-x,x/=n,x--,pik=n*sqr(x)+2*x*nw;
x++,pik=min(pik,n*sqr(x)+2*x*nw);
x++,pik=min(pik,n*sqr(x)+2*x*nw);
ans+=pik-(FFT::sol()<<1),cout<<ans<<endl;
return 0;
}

luoguP3723 HNOI2017 礼物的更多相关文章

  1. bzoj 4827: [Hnoi2017]礼物 [fft]

    4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...

  2. P3723 [AH2017/HNOI2017]礼物

    题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1      c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...

  3. 【BZOJ4827】 [Hnoi2017]礼物

    BZOJ4827 [Hnoi2017]礼物 Solution 如果一串数的增加,不就等于另一串数减吗? 那么我们可以把答案写成另一个形式: \(ans=\sum_{i=1}^n(x_i-y_i+C)^ ...

  4. 4827: [Hnoi2017]礼物

    4827: [Hnoi2017]礼物 链接 分析: 求最小的$\sum_{i=1}^{n}(x_i-y_i)^2$ 设旋转了j位,每一位加上了c. $\sum\limits_{i=1}^{n}(x_{ ...

  5. 【LG3723】[AHOI2017/HNOI2017]礼物

    [LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...

  6. 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告

    P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...

  7. [BZOJ4827][Hnoi2017]礼物(FFT)

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1315  Solved: 915[Submit][Status] ...

  8. [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)

    题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...

  9. 笔记-[AH2017/HNOI2017]礼物

    笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...

随机推荐

  1. Windows监控——性能指标详解(转)

    http://blog.csdn.net/yiqin3399/article/details/51730106

  2. 安装mangodb

    1.配置yum源 [root@www ~]# cat /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repo ...

  3. 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】

    old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...

  4. Flume采集日志

    角色 Source 数据来源 (exec, kafka, http…)Channel 数据通道 (memory,file,jdbc)Sink 数据目的地 (kafka,hdfs,es…) Agent ...

  5. Redis 入门 3.1 热身

    3.1 热身 1. 获得符合规则的键名列表 KEYS pattern pattern 支持 glob 风格通配符格式 语言 字符组 ? 匹配一个字符 * 匹配任意个(包括0个)字符 [] 匹配括号间的 ...

  6. LeetCode.1033-移动石头直到连续(Moving Stones Until Consecutive)

    这是小川的第386次更新,第414篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第247题(顺位题号是1033).在a,b和c位置的数字线上有三块石头.每次,你在一个终点 ...

  7. LeetCode.925-长按的名字(Long Pressed Name)

    这是悦乐书的第355次更新,第380篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第217题(顺位题号是925).你的朋友正在键盘上输入他的名字. 有时,在键入字符c时, ...

  8. SpringBoot常用注解有哪些?

    @Service: 注解在类上,表示这是一个业务层bean@Controller: 注解在类上,表示这是一个控制层bean@Repository: 注解在类上,表示这是一个数据访问层bean@Comp ...

  9. 滚动翻页vue

    <template> <div class="home"> <div style="height:100%; width:100%;&quo ...

  10. 第六次学习总结&&第四次实验总结

    Java实验报告 班级 1班 学号 20188390 姓名 宋志豪 实验四 类的继承 1.实验目的 (1)掌握类的继承方法: (2)变量的继承和覆盖,方法的继承.重载和覆盖实现: 2.实验内容 实验代 ...