博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「luogu2414」[AH2017/HNOI2017]礼物
阅读量:4634 次
发布时间:2019-06-09

本文共 2829 字,大约阅读时间需要 9 分钟。

考虑c固定时快速算出所有位置的最小差异值,

把平方拆掉后构造一下发现是个卷积形式,fft即可。

m的范围很小,且答案关于m是一个单峰函数,所以我一开始以为是三分m,算了算复杂度好像很可过的样子,

写出来后发现不开O2只有70分(BZOJ可过)

看了别人的程序才知道c可以直接算出来!!!

其实只要让两个环上的总和最接近,答案就是最小的。

1 #include
2 #define R register 3 #define db double 4 using namespace std; 5 const int N=50010,oo=INT_MAX; 6 const db PI=acos(-1); 7 int n,nn,m,x[N<<2],y[N<<2],rev[N<<2],maxp,s; 8 int read(){ 9 int x=0,w=1;char c=0;10 while(c<'0'||c>'9') c=getchar();11 while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();12 return x*w;13 }14 struct Com{15 db real,image;16 Com operator+(const Com& k)const{
return (Com){real+k.real,image+k.image};}17 Com operator-(const Com& k)const{
return (Com){real-k.real,image-k.image};}18 Com operator*(const Com& k)const{
return (Com){real*k.real-image*k.image,real*k.image+image*k.real};}19 Com operator/(const int& k)const{
return (Com){real/k,image/k};}20 }fa[N<<2],fb[N<<2],fc[N<<2];21 inline void fft(Com* a,int b){22 for(R int i=0;i
i) swap(a[rev[i]],a[i]);23 for(R int len=2;len<=s;len<<=1){24 Com wn=(Com){cos(2.0*PI/len),b*sin(2.0*PI/len)};25 for(R int i=0;i
>1);j++,w=w*wn){28 Com a0=a[i+j],a1=w*a[i+j+(len>>1)];29 a[i+j]=a0+a1,a[i+j+(len>>1)]=a0-a1;30 }31 }32 }33 if(b==-1) for(R int i=0;i
>1]>>1)^(((i&1)<<(maxp-1)));60 for(int i=0;i

三分代码:

1 #include
2 #define R register 3 #define db double 4 using namespace std; 5 const int N=50010,oo=INT_MAX; 6 const db PI=acos(-1); 7 int n,nn,m,x[N<<2],y[N<<2],rev[N<<2],maxp,s; 8 int read(){ 9 int x=0,w=1;char c=0;10 while(c<'0'||c>'9') c=getchar();11 while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();12 return x*w;13 }14 struct Com{15 db real,image;16 Com operator+(const Com& k)const{
return (Com){real+k.real,image+k.image};}17 Com operator-(const Com& k)const{
return (Com){real-k.real,image-k.image};}18 Com operator*(const Com& k)const{
return (Com){real*k.real-image*k.image,real*k.image+image*k.real};}19 Com operator/(const int& k)const{
return (Com){real/k,image/k};}20 }fa[N<<2],fb[N<<2],fc[N<<2];21 void fft(Com* a,int b){22 for(R int i=0;i
i) swap(a[rev[i]],a[i]);23 for(R int len=2;len<=s;len<<=1){24 Com wn=(Com){cos(2.0*PI/len),b*sin(2.0*PI/len)};25 for(R int i=0;i
>1);j++,w=w*wn){28 Com a0=a[i+j],a1=w*a[i+j+(len>>1)];29 a[i+j]=a0+a1,a[i+j+(len>>1)]=a0-a1;30 }31 }32 }33 if(b==-1) for(R int i=0;i
>1]>>1)^(((i&1)<<(maxp-1)));58 for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/mycups/p/8567395.html

你可能感兴趣的文章
如何学习web前端
查看>>
关于HTML代码的转义
查看>>
linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件...
查看>>
curl多线程类。
查看>>
webapi demo
查看>>
软件实施
查看>>
objective-c abort() 与 exit() 函数的区别
查看>>
JSoup笔记
查看>>
html表单的创建和css的构成
查看>>
datatable和dataset的区别
查看>>
并发与并行的区别
查看>>
DP UVALive 6506 Padovan Sequence
查看>>
简单几何(线段覆盖) POJ 3347 Kadj Squares
查看>>
树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)
查看>>
vim使用大全
查看>>
想搞自动识别系统的应用程序,希望能跟有志于此的朋友交流
查看>>
打算看的书或正在看的书
查看>>
搭建Gitlab
查看>>
java源程序结构
查看>>
# 命令行新建 job 错误: ORA-01008 并非所有变量都已绑定 。
查看>>