hdu5730 Shell Necklace
来源:互联网 发布:网络上拨娜娜什么意思 编辑:程序博客网 时间:2024/06/05 15:29
列出dp方程
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const double pi=acos(-1);const int p=313,maxn=800010;struct Complex{ double a,b; Complex operator + (const Complex &c) const { return (Complex){a+c.a,b+c.b}; } Complex operator - (const Complex &c) const { return (Complex){a-c.a,b-c.b}; } Complex operator * (const Complex &c) const { return (Complex){a*c.a-b*c.b,a*c.b+b*c.a}; }}f[maxn],g[maxn],w[maxn];int a[maxn],dp[maxn],rev[maxn],n;void fft(Complex *a,int m,int t,int flag){ int x; Complex t1,t2; for (int i=0;i<m;i++) if (rev[i]>i) swap(a[i],a[rev[i]]); for (int i=0;i<t;i++) for (int j=0;j<m;j+=1<<(i+1)) { x=0; for (int k=j;k<j+(1<<i);k++) { t1=a[k]; t2=a[k+(1<<i)]; a[k]=t1+t2*w[x]; a[k+(1<<i)]=t1-t2*w[x]; x+=flag*(1<<(t-i-1)); if (x<0) x+=m; } }}void divcon(int l,int r){ if (l==r) return; int mid=(l+r)/2,m=1,t=0; divcon(l,mid); for (int i=0;i<=mid-l;i++) f[i]=(Complex){(double)dp[l+i],0.0}; for (int i=0;i<=r-l-1;i++) g[i]=(Complex){(double)a[i+1],0.0}; while (m<=2*(r-l-1)) m<<=1,t++; for (int i=mid-l+1;i<m;i++) f[i]=(Complex){0.0,0.0}; for (int i=r-l;i<m;i++) g[i]=(Complex){0.0,0.0}; for (int i=0;i<m;i++) { rev[i]=0; for (int j=0;j<t;j++) rev[i]|=((i>>j)&1)<<(t-j-1); } for (int i=0;i<m;i++) w[i]=(Complex){cos(2*pi*i/m),sin(2*pi*i/m)}; fft(f,m,t,1); fft(g,m,t,1); for (int i=0;i<m;i++) f[i]=f[i]*g[i]; fft(f,m,t,-1); for (int i=mid+1;i<=r;i++) dp[i]=(dp[i]+int(f[i-l-1].a/m+0.5))%p; divcon(mid+1,r);}void solve(){ for (int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]%=p,dp[i]=0; dp[0]=1; divcon(0,n); printf("%d\n",dp[n]);}int main(){ //freopen("e.in","r",stdin); while (scanf("%d",&n)&&n) solve();}
阅读全文
0 0
- hdu5730 Shell Necklace
- hdu5730 Shell Necklace
- hdu5730 Shell Necklace
- 【HDU5730】Shell Necklace——CDQ+FFT
- [DP] [1D1D优化] [FFT] [CDQ分治] [HDU5730] Shell Necklace
- [分治fft] hdu5730 2016多校第一场1008 Shell Necklace
- 【HDU5730 2016 Multi-University Training Contest 1H】【FFT + cdq 分治】 Shell Necklace f[i]=∑f[i-j] x a[j]
- hdu 5730 Shell Necklace
- HDU 5730 Shell Necklace
- HDU 5730 Shell Necklace(FFT+分治)
- Hdu 5730 Shell Necklace(cdq+fft)
- HDU 5730——Shell Necklace
- hdu 5730 Shell Necklace cdq分治+FFT
- necklace
- HDU 5730 Shell Necklace(CDQ分治+FFT)
- [HDU 5730] Shell Necklace (FFT+CDQ分治)
- HDU 5730 多校1 Shell Necklace (CDQ分治+FFT)
- HDU 5730 Shell Necklace(dp+cdq分治+FFT优化)
- 正则表达式
- HDU-3350 #define is unsafe(dfs 解析字符串)
- SSL与TLS 区别 以及介绍
- 【七日牧函】为福音争战的教会
- 谨以此文纪念我失败的E题
- hdu5730 Shell Necklace
- Python入门
- Java中的类及对象权限
- 专题二 符号的技巧---- 13.++,--操作符的分析
- CC2530通用I/O
- Eclipse用法和技巧一:还原视图和编辑器
- Git 分支
- 讲章 | 王怡牧师:恩典为王
- C语言的getc()和putc()函数