bzoj #4827 礼物(FFT)(HNOI2017)
标签:FFT
Description
Input
Output
不妨设第一个手环为S,第二个手环为T,则题意变为求∑(Si−Ti+k+C)2∑(Si−Ti+k+C)2\sum(S_i-T_{i+k}+C)^2的最小值
我们将上式展开,可以得到
\sum(S_i^2+T_{i+k}^2+C^2+2*C(S_i-T_{i+k})-2*S_iT_{i+k})
进一步得到
\sum S_i^2+\sum T_i^2+n*C^2+2*c*\sum(S_i-T_i)-2*\sum S_iT_{i+k}
先抛开CCC不看,我们发现只有∑SiTi+k" role="presentation" style="position: relative;">∑SiTi+k∑SiTi+k\sum S_iT_{i+k}不是常数
如何求∑SiTi+k∑SiTi+k\sum S_iT_{i+k}最大值呢?标准套路:将T数组反转,求出S与T的卷积,不难发现,∑SiTi+k∑SiTi+k\sum S_iT_{i+k}对应每一个k的取值,都是卷积中两个相差n次的项的系数之和,这里可以用FFT,将复杂度降到O(nlogn)。
求完∑SiTi+k∑SiTi+k\sum S_iT_{i+k}最大值后,我们发现只有关于C的二次项与一次项,直接用二次函数求最值的方法即可,注意C只能为整数。
/**************************************************************Problem: 4827User: P1atformLanguage: C++Result: AcceptedTime:592 msMemory:9108 kb
****************************************************************/#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#define N 200000
#define INF 1000000000
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
ll n,m,M,p=0ll,q=0ll,z=0ll,ans=INF,r[N+50],x,l;
struct com
{double x,y;inline com operator +(com b){com ret;ret.x=x+b.x,ret.y=y+b.y;return ret;}inline com operator -(com b){com ret;ret.x=x-b.x,ret.y=y-b.y;return ret;}inline com operator *(com b){com ret;ret.x=x*b.x-y*b.y,ret.y=x*b.y+y*b.x;return ret;}
}s[N+50],t[N+50];
template<class _T> inline void read(_T &x)
{x=0;char ch=getchar();int f=0;while (!isdigit(ch)) {if (ch=='-') f=1;ch=getchar();}while (isdigit(ch)) x=(x<<3)+(x<<1)+ch-'0',ch=getchar();if (f) x=-x;
}
inline void fft(com a[],int k)
{for (int i=1;i<n;i++) if (i<r[i]) swap(a[i],a[r[i]]);for (int i=1;i<n;i<<=1){com w,wn,X,Y;wn.x=cos(pi/i),wn.y=k*sin(pi/i);for (int j=0;j<n;j+=(i<<1)){w.x=1,w.y=0;for (int _=0;_<i;_++,w=w*wn){X=a[j+_],Y=w*a[j+_+i];a[j+_]=X+Y,a[j+_+i]=X-Y;}} }if (k==-1) for (int i=0;i<n;i++) a[i].x/=n;
}
int main()
{read(n),n--,read(M),memset(s,0,sizeof(s)),memset(t,0,sizeof(t));for (int i=0;i<=n;i++) read(x),p+=x*x,q+=x,s[i].x=x;for (int i=0;i<=n;i++) read(x),p+=x*x,q-=x,t[n-i].x=x;for (m=2*n,n=1;n<=m;n<<=1) l++;for (int i=1;i<n;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));fft(s,1),fft(t,1);for (int i=0;i<=n;i++) s[i]=s[i]*t[i];fft(s,-1),n=m/2,z=(ll)(s[n].x+0.5);for (int i=1;i<=n;i++) z=max(z,(ll)(s[i-1].x+0.5)+(ll)(s[i+n].x+0.5));for (int i=-M;i<=M;i++) ans=min(ans,p-2*z+i*((n+1)*i+2*q));printf("%lld\n",ans);
}
bzoj #4827 礼物(FFT)(HNOI2017)相关推荐
- [BZOJ 4827][Hnoi2017]礼物
4827: [Hnoi2017]礼物 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 1091 Solved: 748 [Submit][Statu ...
- bzoj 3055礼物运送 floyed + 状压DP
bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...
- bzoj 4827 [Hnoi2017]礼物——FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c ...
- BZOJ 4827 [Hnoi2017]礼物 ——FFT
题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...
- [4827][Hnoi2017]礼物——FFT
题目大意: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...
- 【刷题】BZOJ 4827 [Hnoi2017]礼物
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...
- P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简
传送门 文章目录 题意: 思路: 题意: 思路: 首先可以知道,我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数,所以我们设变化量为xxx. 对于∑i=1n(ai−bi)2\sum ...
- bzoj4827: [Hnoi2017]礼物 FFT
bzoj4827: [Hnoi2017]礼物 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n ...
- [AH2017/HNOI2017]礼物(FFT)
题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...
最新文章
- 进阶SQL技巧:subquery, string function, window function
- windows上配置jdk环境变量
- codeforces 667A A. Pouring Rain(水题)
- GEF调色板中的多级树结构
- OpenWRT 随记
- cocob optimizer让学习率不再是算法参数
- ThinkPHP之MVC简析
- B. Box Fitting
- AI算法工程师手册!
- 一个企业为什么执行不力?
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- 蓝桥杯 ADV-157算法提高 现代诗如蚯蚓
- js正则验证输入表情
- 扇贝有道180911每日一句
- XILINX FPGA数字信号处理——3、数字的表示和运算的实现
- RFNoC GNU Radio使用教程
- python程序员工资待遇-看看你是哪种级别的Python程序员(已跪)
- (一)安装Emacs
- 集成安装光盘制作教程(http://bbs.deepin.org/viewthread.php?tid=1170144)
- Windows 2016 修改密码时提示密码不符合规则
热门文章
- 什么蓝牙耳机佩戴舒服音质好?国庆出游佩戴的蓝牙耳机
- 在家里最简单有效的身体锻炼方法
- 树 (二叉树)--- (内含树(二叉树)的概念、二叉树性质、遍历(非递归)、习题)永不过时的数据结构
- c语言 二维数组实训题目程序,《C语言程序设计》1-3维数组随堂测试
- 用手机拍摄视频技巧大全
- 通知:PostgreSQL证书申报退税请抓紧
- 无人机视频图像运动目标检测算法综述------2019年-------------
- VS2017配置Qt5.9教程
- 【漏洞复现】XMind2020及2021beta版本存在xss漏洞导致任意代码执行
- L1-039 古风排版 Python