BZOJ 3527 力(FFT)
来源:互联网 发布:淘宝女模拍摄技巧 编辑:程序博客网 时间:2024/05/23 14:06
Description
给出一个长度为
Input
第一行一个整数
Output
输出
Sample Input
5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
Sample Output
-16838672.693
3439.793
7509018.566
4595686.886
10903040.872
Solution
令
令
做两遍
Code
#include<cstdio>#include<cmath>#include<algorithm> using namespace std;#define maxn 100005#define maxfft 131072+5const double pi=acos(-1.0);struct cp{ double a,b; cp operator +(const cp &o)const {return (cp){a+o.a,b+o.b};} cp operator -(const cp &o)const {return (cp){a-o.a,b-o.b};} cp operator *(const cp &o)const {return (cp){a*o.a-b*o.b,b*o.a+a*o.b};} cp operator *(const double &o)const {return (cp){a*o,b*o};} cp operator !() const{return (cp){a,-b};}}w[maxfft];int pos[maxfft];void fft_init(int len){ int j=0; while((1<<j)<len)j++; j--; for(int i=0;i<len;i++) pos[i]=pos[i>>1]>>1|((i&1)<<j);}void fft(cp *x,int len,int sta){ for(int i=0;i<len;i++) if(i<pos[i])swap(x[i],x[pos[i]]); w[0]=(cp){1,0}; for(unsigned i=2;i<=len;i<<=1) { cp g=(cp){cos(2*pi/i),sin(2*pi/i)*sta}; for(int j=i>>1;j>=0;j-=2)w[j]=w[j>>1]; for(int j=1;j<i>>1;j+=2)w[j]=w[j-1]*g; for(int j=0;j<len;j+=i) { cp *a=x+j,*b=a+(i>>1); for(int l=0;l<i>>1;l++) { cp o=b[l]*w[l]; b[l]=a[l]-o; a[l]=a[l]+o; } } } if(sta==-1)for(int i=0;i<len;i++)x[i].a/=len,x[i].b/=len;}cp x[maxfft],y[maxfft],z[maxfft];void FFT(double *a,double *b,int n,int m,double *c){ int len=1; while(len<(n+m)>>1)len<<=1; fft_init(len); for(int i=n/2;i<len;i++)x[i].a=x[i].b=0; for(int i=m/2;i<len;i++)y[i].a=y[i].b=0; for(int i=0;i<n;i++)(i&1?x[i>>1].b:x[i>>1].a)=a[i]; for(int i=0;i<m;i++)(i&1?y[i>>1].b:y[i>>1].a)=b[i]; fft(x,len,1),fft(y,len,1); for(int i=0;i<len/2;i++) { int j=len-1&len-i; z[i]=x[i]*y[i]-(x[i]-!x[j])*(y[i]-!y[j])*(w[i]+(cp){1,0})*0.25; } for(int i=len/2;i<len;i++) { int j=len-1&len-i; z[i]=x[i]*y[i]-(x[i]-!x[j])*(y[i]-!y[j])*((cp){1,0}-w[i^len>>1])*0.25; } fft(z,len,-1); for(int i=0;i<n;i++) if(i&1)c[i]=z[i>>1].b; else c[i]=z[i>>1].a;}int n;double q[maxn],A[maxn],B[maxn],ans[maxn];int main(){ while(~scanf("%d",&n)) { for(int i=0;i<n;i++)scanf("%lf",&q[i]); for(int i=0;i<n;i++)A[i]=q[i]; A[n]=0; B[0]=0; for(int i=1;i<=n;i++)B[i]=1.0/i/i; FFT(A,B,n+1,n+1,A); for(int i=0;i<n;i++)ans[i]=A[i]; for(int i=0;i<n;i++)A[i]=q[n-i]; A[n]=0; B[0]=0; for(int i=1;i<=n;i++)B[i]=1.0/i/i; FFT(A,B,n+1,n+1,A); for(int i=0;i<n;i++)ans[i]-=A[n-i]; for(int i=0;i<n;i++) printf("%.3f\n",ans[i]); } return 0;}
阅读全文
0 0
- BZOJ 3527 力(FFT)
- BZOJ 3527 [ZJOI 3014] 力 (FFT)
- bzoj 3527: [Zjoi2014]力 (FFT)
- BZOJ 3527 [Zjoi2014]力 FFT
- 【BZOJ 3527】 [Zjoi2014]力|FFT
- BZOJ 3527 [Zjoi2014] 力 FFT
- BZOJ 3527[Zjoi2014]力 FFT
- BZOJ 3527(FFT模板)
- BZOJ 3527 ZJOI 2014 力 FFT
- BZOJ 3527 ZJOI 2014 力 FFT
- bzoj 2179: FFT快速傅立叶 (FFT)
- BZOJ 2179 FFT快速傅立叶(FFT)
- 【BZOJ】【P3527】【ZJOI2014】【力】【题解】【FFT】
- bzoj 4503: 两个串 (FFT+DP)
- [BZOJ 3160]万径人踪灭(FFT+Manacher)
- bzoj 4259: 残缺的字符串 (FFT)
- bzoj 3160: 万径人踪灭 (FFT+manacher)
- bzoj 3513: [MUTC2013]idiots (FFT)
- jvm垃圾回收机制
- 背包习题总结
- vbs 转码 gb2312转换为UTF-8编码的函数
- HDOJ1009 贪心水题
- JS高程6.面向对象的程序设计(1)理解对象
- BZOJ 3527 力(FFT)
- 常用SQL
- React Native移动开发实战-3-实现页面间的数据传递
- Linux exec与重定向
- UVA
- DrawerLayout1
- HDU_6140 Hybrid Crystals 【思维】
- 学生调错(二)
- Process SDK RTOS Creating a SD Card with Windows