[BZOJ4827][Hnoi2017]礼物(FFT)
4827: [Hnoi2017]礼物
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 1315 Solved: 915
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5
6 3 3 4 5
Sample Output
【样例解释】
需要将第一个手环的亮度增加1,第一个手环的亮度变为: 2 3 4 5 6 旋转一下第二个手环。对于该样例,是将第
二个手环的亮度6 3 3 4 5向左循环移动 2017-04-15 第 6 页,共 6 页 一个位置,使得第二手环的最终的亮度为
:3 3 4 5 6。 此时两个手环的亮度差异值为1。
HINT
Source
Solution
由于是多项式第一题所以抄的yyb的题解(说的像我后面就能自己做一样。。。)
为了方便,我们从0开始编号,然后答案就是下面这个式子
\[{\mathop{ \sum }\limits_{{i=0}}^{{n-1}}{\mathop{{{ \left( {\mathop{{x}}\nolimits_{{i}}\mathop{{-y}}\nolimits_{{i+k}}+c} \right) }}}\nolimits^{{2}}}}\]
其中${c}$的取值范围为${ \left[ {-m,m} \right] }$,因为一旦超过这个范围,$c+{\mathop{{y}}\nolimits_{{i}}}$的绝对值一定大于${\mathop{{x}}\nolimits_{{i}}}$的绝对值,这样把$c$+1或-1一定能使答案更小。
把答案式子拆开:
\[{{ \sum {\mathop{{\mathop{{x}}\nolimits_{{i}}}}\nolimits^{{2}}}}+{ \sum {\mathop{{\mathop{{y}}\nolimits_{{i}}}}\nolimits^{{2}}}-{2 \sum {\mathop{{x}}\nolimits_{{i\text{ }}}\mathop{{y}}\nolimits_{{i+k}}}+n\mathop{{c}}\nolimits^{{2}}+}}2c \left( { \sum {\mathop{{x}}\nolimits_{{i}}}-{ \sum {\mathop{{y}}\nolimits_{{i}}}}} \right) }\]
c可以枚举,所以除了${ \sum {\mathop{{x}}\nolimits_{{i\text{ }}}\mathop{{y}}\nolimits_{{i+k}}}}$都算常数项了,接下来考虑如何最大化${ \sum {\mathop{{x}}\nolimits_{{i\text{ }}}\mathop{{y}}\nolimits_{{i+k}}}}$
显然不能n^2暴力乘。我们把$x$看成一个多项式,把$y$ reverse一下,也看成一个多项式,然后做卷积,发现卷积后第n-1项的系数恰好就是${ \sum {\mathop{{x}}\nolimits_{{i\text{ }}}\mathop{{y}}\nolimits_{{i}}}}$。
解法呼之欲出:把$y$(reverse后的)复制一遍接在后面,然后跟$x$做卷积,那么卷积后第n-1+k项的系数就是${ \sum {\mathop{{x}}\nolimits_{{i\text{ }}}\mathop{{y}}\nolimits_{{i+k}}}}$。
//公式编辑得好累……
Code
#include<bits/stdc++.h>
using namespace std;
const int N=<<;
const double pi=acos(-1.0);
inline int read(){
int x=,w=;char ch=;
while(!isdigit(ch)) w|=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return w?-x:x;
}
struct cp{
double x,y;
cp(double xx=,double yy=):x(xx),y(yy){};
cp operator + (const cp &tmp)const{return cp(x+tmp.x,y+tmp.y);}
cp operator - (const cp &tmp)const{return cp(x-tmp.x,y-tmp.y);}
cp operator * (const cp &tmp)const{return cp(x*tmp.x-y*tmp.y,x*tmp.y+y*tmp.x);}
};
int n,m,ans,ss,sa[N],sb[N],rev[N],res[N];
cp a[N],b[N];
void fft(int n,cp a[],int fg){
for(int i=;i<n;++i) if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int m=,len=m<<;m<n;m<<=,len<<=){
cp I=cp(cos(pi/m),fg*sin(pi/m));
for(int i=;i<n;i+=len){
cp w=cp(,),t;
for(int j=;j<m;++j,w=w*I)
t=a[i+j+m]*w,
a[i+j+m]=a[i+j]-t,
a[i+j]=a[i+j]+t;
}
}
}
void pre(){
for(int i=;i<n;++i) a[i].x=sa[i+],b[i].x=b[i+n].x=sb[n-i];
int lim=,l=;
while(lim<=(n*-)) lim<<=,++l;
for(int i=;i<lim;++i) rev[i]=(rev[i>>]>>)|((i&)<<(l-));
fft(lim,a,),fft(lim,b,);
for(int i=;i<lim;++i) a[i]=a[i]*b[i];
fft(lim,a,-);
for(int i=;i<lim;++i)
res[i]=(int)(a[i].x/lim+0.5);
}
int main(){
n=read(),m=read();
for(int i=;i<=n;++i){
sa[i]=read();
ans+=sa[i]*sa[i];
ss+=sa[i];
}
for(int i=;i<=n;++i){
sb[i]=read();
ans+=sb[i]*sb[i];
ss-=sb[i];
}
pre();
int tmp=;
for(int k=;k<n;++k) tmp=max(tmp,res[n-+k]);
ans-=(tmp<<);tmp=0x3f3f3f3f;
for(int c=-m;c<=m;++c) tmp=min(tmp,n*c*c+*c*ss);
cout<<ans+tmp<<endl;
return ;
}
BZOJ4827
[BZOJ4827][Hnoi2017]礼物(FFT)的更多相关文章
- BZOJ4827: [Hnoi2017]礼物(FFT 二次函数)
题意 题目链接 Sol 越来越菜了..裸的FFT写了1h.. 思路比较简单,直接把 \(\sum (x_i - y_i + c)^2\) 拆开 发现能提出一坨东西,然后与c有关的部分是关于C的二次函数 ...
- BZOJ4827:[HNOI2017]礼物(FFT)
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...
- [bzoj4827][Hnoi2017]礼物_FFT
礼物 bzoj-4827 Hnoi-2017 题目大意:给定两个长度为$n$的手环,第一个手环上的$n$个权值为$x_i$,第二个为$y_i$.现在我可以同时将所有的$x_i$同时加上自然数$c$.我 ...
- bzoj 4827: [Hnoi2017]礼物 [fft]
4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...
- [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...
- BZOJ4827 [Hnoi2017]礼物 多项式 FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8823962.html 题目传送门 - BZOJ4827 题意 有两个长为$n$的序列$x$和$y$,序列$x,y ...
- 【bzoj4827】[Hnoi2017]礼物 FFT
题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一天 ...
- bzoj4827 [Hnoi2017]礼物
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...
- [AH2017/HNOI2017]礼物(FFT)
题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...
随机推荐
- linux 安装telnet、curl、ifconfig、vim、ping等工具
1.首先执行下面命令更新相关源 apt-get update 2.安装telnet apt-get install telnet 3.安装curl apt-get install curl 4.安装i ...
- Linux下安装Jenkins并且发布.net core
一,基础环境 1,操作系统:CentOS 7.3 2,Docker version 18.09.6 docker安装参考:https://www.cnblogs.com/liuxiaoji/p/110 ...
- js 动态添加Table tr,选中与不选中checkbox行数NO的变化
首次加载进入页面,如图: 注:Table是在js中拼接字符串循环动态添加的(拼接字符串,详见之前随笔) 点击Line2 checkbox后,效果如图: 实现的效果就是: 点击checkbox — 显示 ...
- 使用EF Core 连接远程oracle 不需要安装oracle客户端方法
连接字符串: Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=IP地址(PORT=1521))(CONNECT_DATA=(SERVICE_ ...
- openlayers加载天地图过程中遇到跨域问题
// 采用openlayers加载天地图 var layer = new ol.layer.Tile({ source: new ol.source.XYZ({ // crossOrigin: 'An ...
- Tomcat面试题汇总
详见:Tomcat 面试题汇总:https://blog.csdn.net/qq_25934401/article/details/81536958 1.Tomcat的缺省端口是多少,怎么修改? to ...
- UE中正则表达式
UltraEdit(后简称UE),是我经常使用的文本编辑软件,其功能的强大,令我由衷地爱上了它.每天不用就全身不爽.从最开始的9.0到现在的 12.10a(本人只用到这个版本),UE都是系统重装后必安 ...
- 8.6.zookeeper应用案例_分布式共享锁的简单实现
1.分布式共享锁的简单实现 在分布式系统中如何对进程进行调度,假设在第一台机器上挂载了一个资源,然后这三个物理分布的进程都要竞争这个资源,但我们又不希望他们同时 进行访问,这时候我们就需要一个协调器, ...
- Android | 自动调整文本大小的 TextViews
简评:Auto-Sizing TextViews -- 当 TextView 的布局边界尺寸发生变化时,文本大小可以跟着自动缩放调整. 有时候我们需要 TextView 根据放入的内容来改变其文本大小 ...
- 部署nginx脚本
cd nginx-1.12.2useradd -s /sbin/nologin nginx./configuremakemake installyum -y install mariadb maria ...