BZOJ 3527[Zjoi2014]力 FFT
来源:互联网 发布:手机注册淘宝账号流程 编辑:程序博客网 时间:2024/05/24 00:23
题目链接:BZOJ3527
第一次学会如何写数学公式,虽然只是简单的入门,但还是有点激动。。。
首先这个题很明显是多项式乘法,但是强迫症的我过于纠结下标,以至于困惑了好久,简直SB。
注:下标均从0开始。
现在进入正题。
现在我们转化一下:记住下标从0开始
记
等号右边第一个式子
等号右边第二个式子
倒序处理,令
最后
代码如下:
/************************************************************** Problem: 3527 User: sfailsthy Language: C++ Result: Accepted Time:3764 ms Memory:17680 kb****************************************************************/#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int maxn=262200+10;const double PI =acos(-1.0);struct Complex{ double real,image; Complex(){ real=image=0.0; } Complex(double a,double b){ real=a; image=b; } Complex operator + (const Complex &s) const{ return Complex(real+s.real,image+s.image); } Complex operator - (const Complex &s) const{ return Complex(real-s.real,image-s.image); } Complex operator * (const Complex &s) const{ return Complex(real*s.real-image*s.image,real*s.image+image*s.real); }}x1[maxn],x2[maxn],A[maxn];int n,rev[maxn];double a[maxn/2],b[maxn/2],c[maxn/2];void init(int &len,int len1,int len2){ int k=1,L=0,r,t; while(k<2*len1||k<2*len2){ k<<=1; L++; } len=k; for(int i=0;i<len;i++){ t=i,r=0,k=L; while(k--){ r<<=1; r|=t&1; t>>=1; } rev[i]=r; }}void FFT(Complex x[],int len,int op){ Complex u,t; for(int i=0;i<len;i++){ A[rev[i]]=x[i]; } for(int i=0;i<len;i++){ x[i]=A[i]; } for(int k=2;k<=len;k<<=1){ Complex wn(cos(2*PI/k*op),sin(2*PI/k*op)); for(int i=0;i<len;i+=k){ Complex w(1,0); for(int j=0;j<k/2;j++){ u=x[i+j]; t=w*x[i+j+k/2]; x[i+j]=u+t; x[i+j+k/2]=u-t; w=w*wn; } } } if(op==-1){ for(int i=0;i<len;i++){ x[i].real/=len; } }}int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf",&a[i]); } for(int i=1;i<n;i++){ b[i]=1.0/i/i; } int len,len1=n,len2=n; init(len,len1,len2); for(int i=0;i<len;i++){ x1[i]=Complex(); x2[i]=Complex(); } for(int i=0;i<len;i++){ x1[i]=Complex(a[i],0); x2[i]=Complex(b[i],0); } FFT(x1,len,1); FFT(x2,len,1); for(int i=0;i<len;i++){ x1[i]=x1[i]*x2[i]; } FFT(x1,len,-1); for(int i=0;i<n;i++){ c[i]=x1[i].real; } for(int i=0;i<len;i++){ x1[i]=Complex(); x2[i]=Complex(); } for(int i=0;i<n;i++){ x1[i]=Complex(a[n-1-i],0); if(i) x2[i]=Complex(b[i],0); } FFT(x1,len,1); FFT(x2,len,1); for(int i=0;i<len;i++){ x1[i]=x1[i]*x2[i]; } FFT(x1,len,-1); for(int i=0;i<n;i++){ c[i]-=x1[n-1-i].real; } for(int i=0;i<n;i++){ printf("%.3lf\n",c[i]); } return 0;}
0 0
- BZOJ 3527 [Zjoi2014]力 FFT
- 【BZOJ 3527】 [Zjoi2014]力|FFT
- BZOJ 3527 [Zjoi2014] 力 FFT
- BZOJ 3527[Zjoi2014]力 FFT
- bzoj 3527: [Zjoi2014]力 (FFT)
- 3527: [Zjoi2014]力 FFT
- 【BZOJ】【P3527】【ZJOI2014】【力】【题解】【FFT】
- BZOJ 3527: [Zjoi2014]力
- 【BZOJ 3527】 [Zjoi2014]力
- BZOJ 3527 [Zjoi2014] 力
- 【BZOJ 3527】 [Zjoi2014]力
- bzoj 3527 [Zjoi2014]力
- BZOJ 3527 [Zjoi2014]力
- 【jzoj3617】【ZJOI2014】【力】【fft】
- [BZOJ3527][Zjoi2014][FFT]力
- [FFT] BZOJ3527: [Zjoi2014]力
- FFT BZOJ3527 [Zjoi2014]力
- 【ZJOI2014】【BZOJ3527】 力 (FFT)
- stm32f070 软件复位
- 文章标题
- [代码实例][SQLServer]关闭连接
- 【Android】为 RecyclerView增加监听以及数据混乱的小坑
- 失败加载jni分享库/Failed to load the jni shared library
- BZOJ 3527[Zjoi2014]力 FFT
- NSURLSession使用说明及后台工作流程分析
- 最短路径—Dijkstra算法和Floyd算法
- python3.4写一个爬虫程序2
- C++学生信息管理系统
- 手把手教你利用Jenkins持续集成iOS项目
- 手把手教你搭建Jenkins+Github持续集成环境
- webdriver入门-第一篇
- 火星人家园:火星人的真实故事(1)