题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了。

然后考虑计算的式子,可以分成两个部分分开计算。

前半部分FFT,后半部分扫一遍。

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define double long double
#define llinf 10000000000000000LL
#define maxn 500005
#define eps 1e-6struct Complex{double x,y;Complex (){}Complex (double _x,double _y){x=_x;y=_y;}Complex operator + (Complex a) {return Complex(x+a.x,y+a.y);}Complex operator - (Complex a) {return Complex(x-a.x,y-a.y);}Complex operator * (Complex a) {return Complex(x*a.x-y*a.y,x*a.y+y*a.x);}
}A[maxn],B[maxn];const double pi=acos(-1.0);
int rev[maxn];
ll ans=llinf,res[maxn],sumA2=0,sumB2=0,sumA=0,sumB=0;void FFT(Complex *x,int n,int flag)
{F(i,0,n-1) if (rev[i]>i) swap(x[rev[i]],x[i]);for (int m=2;m<=n;m<<=1){Complex wn=Complex(cos(2*pi/m),flag*sin(2*pi/m));for (int i=0;i<n;i+=m){Complex w=Complex(1.0,0);for (int j=0;j<(m>>1);++j){Complex u=x[i+j],v=x[i+j+(m>>1)]*w;x[i+j]=u+v;x[i+j+(m>>1)]=u-v;w=w*wn;}}}
}int n,m,L=0;int main()
{scanf("%d%d",&n,&m);F(i,0,n-1){int x;scanf("%d",&x);A[i].x=x;sumA+=x;sumA2+=(ll)x*x;}D(i,n-1,0){int x;scanf("%d",&x);B[i].x=x;sumB+=x;sumB2+=(ll)x*x;B[i+n].x=B[i].x;}for(m=1;m<=4*n;m<<=1);while(!(m>>L&1))L++;F(i,0,m-1)rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));FFT(A,m,1);FFT(B,m,1);F(i,0,m-1)A[i]=A[i]*B[i];FFT(A,m,-1);F(i,0,m-1) res[i]=(A[i].x+0.4)/m;F(i,-100,100){ll tmp=2*i*(sumA-sumB)+n*i*i;F(j,n-1,2*n-1) ans=min(ans,sumA2+sumB2+tmp);}ll tmp=-llinf;F(i,n-1,2*n-1) tmp=max(tmp,res[i]);ans-=2*tmp;printf("%lld\n",ans);
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6813479.html

BZOJ 4827 [Hnoi2017]礼物 ——FFT相关推荐

  1. bzoj 4827 [Hnoi2017]礼物——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c ...

  2. [BZOJ 4827][Hnoi2017]礼物

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1091  Solved: 748 [Submit][Statu ...

  3. [4827][Hnoi2017]礼物——FFT

    题目大意: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...

  4. 【刷题】BZOJ 4827 [Hnoi2017]礼物

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...

  5. P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简

    传送门 文章目录 题意: 思路: 题意: 思路: 首先可以知道,我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数,所以我们设变化量为xxx. 对于∑i=1n(ai−bi)2\sum ...

  6. bzoj4827: [Hnoi2017]礼物 FFT

    bzoj4827: [Hnoi2017]礼物 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n ...

  7. [AH2017/HNOI2017]礼物(FFT)

    题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...

  8. 4827: [Hnoi2017]礼物

    首先知道旋转的一般套路就是开两倍. 然后此时发现可以把 ∑ni=1(ai−bi)2∑i=1n(ai−bi)2\sum_{i=1}^{n}(a_i-b_i)^2化作∑ni=1a2i+∑ni=1b2i−2 ...

  9. bzoj4827[Hnoi2017]礼物 (FFT,生成函数)

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是 ...

最新文章

  1. Linux /etc/skel目录
  2. ssd颗粒查看工具_SSD又降价了,但是使用前一定要做这几件事
  3. 董明珠今晚开启抖音直播首秀;传苹果将去掉 iPhone 闪电接口;PyTorch 1.5 发布 | 极客头条...
  4. ASP.NET对IIS中的虚拟目录进行操作
  5. 微信点餐外卖源码小程序开发
  6. mysql数据库首次查询缓慢
  7. 一个垃圾分类项目带你玩转飞桨(2)
  8. 程序员如何管理自己的代码
  9. Mac录屏,同时保留声音
  10. 程序员述职报告和转正
  11. 高斯模糊算法的实现和优化
  12. 个人深度学习keras环境配置介绍
  13. 软件架构-解密电商系统-互联网BAT商品详情缓存架构
  14. 深度学习大模型训练--分布式 deepspeed PipeLine Parallelism 源码解析
  15. word无法创建工作文件,请检查临时环境变量
  16. 如何收藏豆瓣FM中的红心歌曲
  17. 【英语面试】三.计算机专业英语面试常见问题(个人选择/学业规划篇)
  18. 小白在阿里云云服务器上如何发布自己的网站(建站|详细)
  19. 微办公企业邮箱 企业机密安全防护升级
  20. vue祖孙组件间传值

热门文章

  1. linux:内核中断
  2. oracle: to_char,to_date
  3. 解决浏览器保存密码自动填充问题
  4. 广西梧州举办警察半程马拉松邀请赛 3000多人开跑
  5. 电脑勒索病毒之谜:用户如何能确保电脑安全
  6. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器
  7. Nginx(PHP/fastcgi)的PATH_INFO问题
  8. [转载] 七龙珠第一部——第091话 克林反败为胜
  9. java.io.IOException: No space left on device
  10. 艾伟:【翻译】使用ASP.NET 2.0记录错误