解题:ZJOI 2014 力

题面

事实说明只会FFT板子是没有用的,还要把式子推成能用FFT/转化一下卷积的方式

虽然这个题不算难的多项式卷积

稍微化简一下可以发现实际是$q_i$和$\frac{1}{(i-j)^2}$在卷,然后每两项是在向下标差值的那项做贡献,而直接卷是向两项下标和的那项做贡献。于是把前半部分的$\frac{1}{(i-j)^2}$做成负的,后半段的做成正的,这样卷完后半段就是题目要求的东西。当然把一个序列反过来再卷也是对的

 1 #include<cmath>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=400005,M=30;
 7 const double pai=acos(-1);
 8 struct cpx
 9 {
10     double x,y;
11 }a[N],b[N];
12 int n,m,nm,rev[N];
13 double Sin[M],Cos[M];
14 cpx operator + (cpx a,cpx b)
15 {
16     return (cpx){a.x+b.x,a.y+b.y};
17 }
18 cpx operator - (cpx a,cpx b)
19 {
20     return (cpx){a.x-b.x,a.y-b.y};
21 }
22 cpx operator * (cpx a,cpx b)
23 {
24     double x1=a.x,x2=b.x,y1=a.y,y2=b.y;
25     return (cpx){x1*x2-y1*y2,x1*y2+x2*y1};
26 }
27 int Log2(int len)
28 {
29     return (int)(log(len)/log(2)+0.5);
30 }
31 void prework()
32 {
33     register int i;
34     scanf("%d",&n),nm=n<<1; 
35     for(i=0;i<n;i++) scanf("%lf",&a[i].x);
36     for(i=0;i<n-1;i++) b[i].x=(double)-1/(n-i-1)/(n-i-1);
37     for(i=n;i<nm-1;i++) b[i].x=(double)1/(i-n+1)/(i-n+1);
38     m=1; while(m<=nm) m<<=1;
39     for(i=1;i<=24;i++) 
40         Sin[i]=sin(2*pai/(1<<i)),Cos[i]=cos(2*pai/(1<<i));
41     for(i=0;i<m;i++)
42         rev[i]=(rev[i>>1]>>1)+(i&1)*(m>>1);
43 }
44 void transform(cpx *c,int t)
45 {
46     register int i,j,k;
47     for(i=0;i<m;i++)
48         if(rev[i]>i) swap(c[i],c[rev[i]]);
49     for(i=2;i<=m;i<<=1)
50     {
51         int len=i>>1;
52         cpx omg={Cos[Log2(i)],Sin[Log2(i)]*t};
53         for(j=0;j<m;j+=i)
54         {
55             cpx ori={1,0},tmp;
56             for(k=j;k<j+len;k++)
57             {
58                 tmp=ori*c[k+len],ori=ori*omg;
59                 c[k+len]=c[k]-tmp,c[k]=c[k]+tmp;
60             }
61         }
62     }
63 }
64 int main()
65 {
66     register int i;
67     prework(),transform(a,1),transform(b,1);
68     for(i=0;i<m;i++) a[i]=a[i]*b[i];
69     transform(a,-1);
70     for(i=n-1;i<nm-1;i++) printf("%f\n",a[i].x/m);
71     return 0;
72 }
View Code

 

转载于:https://www.cnblogs.com/ydnhaha/p/10116181.html

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值