[AH2017/HNOI2017]礼物(FFT)
题目描述
#include<iostream> #include<cstdio> #include<cmath> #define N 200002 using namespace std; typedef long long ll; const double pai=acos(-1.0); ll ans,sum,sum2,l,L,c[N]; int rev[N],n,m; inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x; } struct fs{double x,y;fs(){x=y=0;}fs(double xx,double yy){x=xx;y=yy;}fs operator +(const fs &b)const{return fs{x+b.x,y+b.y};}fs operator -(const fs &b)const{return fs{x-b.x,y-b.y};}fs operator *(const fs &b)const{return fs{x*b.x-y*b.y,x*b.y+y*b.x};} }a[N],b[N]; inline void FFT(fs *a,int tag){for(int i=0;i<l;++i)if(i>rev[i])swap(a[i],a[rev[i]]);for(int i=1;i<l;i<<=1){fs wn(cos(pai/i),tag*sin(pai/i));for(int j=0;j<l;j+=(i<<1)){fs w(1,0); for(int k=0;k<i;++k,w=w*wn){fs x=a[j+k],y=w*a[i+j+k];a[j+k]=x+y;a[i+j+k]=x-y;}} } } int main(){n=rd();m=rd();for(int i=1;i<=n;++i)a[n-i+1].x=rd();for(int i=1;i<=n;++i){b[i].x=rd();sum+=a[i].x*a[i].x+b[i].x*b[i].x;sum2+=a[i].x-b[i].x;}l=1;L=0;while(l<(n<<1))l<<=1,L++;for(int i=1;i<l;++i)rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));FFT(a,1);FFT(b,1);for(int i=0;i<l;++i)a[i]=a[i]*b[i];FFT(a,-1);for(int i=0;i<l;++i)a[i].x=(ll)(a[i].x/l+0.1);for(int i=1;i<=n;++i)a[i+n].x+=a[i].x;for(int i=n+1;i<=n<<1;++i){ans=max(ans,(ll)a[i].x);}ll x=1e18;for(int i=sum2/n-6;i<=sum2/n+6;++i)x=min(x,n*i*i+2*i*sum2);printf("%lld",sum-2*ans+x);return 0; }
转载于:https://www.cnblogs.com/ZH-comld/p/10257433.html
[AH2017/HNOI2017]礼物(FFT)相关推荐
- P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简
传送门 文章目录 题意: 思路: 题意: 思路: 首先可以知道,我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数,所以我们设变化量为xxx. 对于∑i=1n(ai−bi)2\sum ...
- (每日一题)P3723 [AH2017/HNOI2017]礼物(经典FFT)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.15 多项式 FFT Problem ...
- P3723 [AH2017/HNOI2017]礼物(FFT)
P3723 [AH2017/HNOI2017]礼物 式子化简 ∑i=1n(xi−yj)2\sum_{i = 1} ^{n} (x_i- y_j) ^2\\ i=1∑n(xi−yj)2 我们对第一 ...
- AH2017/HNOI2017 礼物
P3723 [AH2017/HNOI2017]礼物 题目大意 给两个数列 a a a和 b b b, a a a和 b b b中的数都小于等于 m m m, b b b可以首尾相接地旋转,要选择一个整 ...
- bzoj4827: [Hnoi2017]礼物 FFT
bzoj4827: [Hnoi2017]礼物 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n ...
- 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...
- 【bzoj4827】[AH2017/HNOI2017]礼物(FFT)
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是 ...
- BZOJ 4827 [Hnoi2017]礼物 ——FFT
题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...
- [AH2017/HNOI2017]礼物
题意: 两个数列,每个数列都可以顺序旋转,也可以对所有数同时增加一个非负整数,现在问 的最小值 题解: 在求卷积前要将A数组倍长,B数组翻转 B数组翻转好理解,为什么A数组倍长,因为题目的数列是可以移 ...
最新文章
- 《评人工智能如何走向新阶段》后记(再续2)
- 云计算和大数据时代网络技术揭秘(六)LISP协议
- BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings
- 简述python中怎样导入模块_12 python中模块和包如何导入
- linux lib64被改名,问题解决:Centos误将/lib64更改为lib64.bak
- mybatis insert返回主键_MyBatis官方文档XML 映射文件
- Hi3559av100安装linux,海思hi3559AV100开发板参数规格介绍
- 简单的HTML5灰度图查看器 simple PACS DICOM HTML5 viewer
- Caffe各版本与源码全透析
- 土地利用转移矩阵图怎么做_土地利用转移矩阵的几种实现方法
- 白噪声的matlab程序,matlab产生白噪声信号
- 计算机专业表情包图片,各个专业表情包盘点 | 你的专业也有自己专属表情包吗?...
- Git 合并单个文件
- 强连通分量(Tarjan算法)和缩点
- 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
- QTableWidget中如何清空行,并保持行仍可再写入数据
- hive表信息查询:查看表结构、表操作等(转)
- Saruman's Army (POJ3069)
- 决策树(Decision Tree)算法 python简单实现
- 64位和32位有什么区别?到底哪个更快?——硬核科普