UVA12298--FFT(递归)
2016-12-24 17:24
363 查看
佳哥蓝书上的题,思路讲得很清楚了,这里注意一下取的牌点数为合数。
PS:递归版本,速度不是特别快,但是代码长度较短,好写一些。
PS:递归版本,速度不是特别快,但是代码长度较短,好写一些。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<complex> using namespace std; typedef long double lf; const int maxn=1000005; const lf pi=acos(-1); complex<lf>a[maxn],b[maxn],c[maxn],d[maxn],ans[maxn]; bool isprime[maxn]; void init(){ memset(isprime,1,sizeof(isprime)); for(int i=2;i<=50000;i++) if(isprime[i]&&((lf)i*i<=50000)) for(int j=i*i;j<=50000;j+=i) isprime[j]=0; } void fft(complex<lf>*y,int n,int flag){ if(n==1)return; complex<lf>y0[n>>1],y1[n>>1]; for(int i=0;i<n;i+=2){ y0[i>>1]=y[i]; y1[i>>1]=y[i+1]; }fft(y0,n>>1,flag),fft(y1,n>>1,flag); complex<lf>tmp(cos(2*pi/n),flag*sin(2*pi/n)),x(1,0); for(int i=0;i<(n>>1);i++,x*=tmp){ y[i]=y0[i]+x*y1[i]; y[i+(n>>1)]=y0[i]-x*y1[i]; } } int main(){ int A,B,C; init(); while(scanf("%d%d%d",&A,&B,&C)&&(A+B+C)){ int n=1,k; char ch[10]; while(n<=4*B)n<<=1; for(int i=0;i<=B;i++) a[i]=b[i]=c[i]=d[i]=(isprime[i]?0:1); for(int i=B+1;i<=n;i++) a[i]=b[i]=c[i]=d[i]=0; while(C--){ scanf("%d%s",&k,ch); switch(ch[0]){ case 'S':a[k]=0;break; case 'H':b[k]=0;break; case 'C':c[k]=0;break; case 'D':d[k]=0;break; } } fft(a,n,1),fft(b,n,1); fft(c,n,1),fft(d,n,1); for(int i=0;i<n;i++) ans[i]=a[i]*b[i]*c[i]*d[i]; fft(ans,n,-1); for(int i=A;i<=B;i++) printf("%lld\n",(long long)(ans[i].real()/n+0.5)); } return 0; }
相关文章推荐
- UVA 12298 Super Poker II(FFT)
- [UVA 12298 Super Poker II]FFT/NTT
- UVA 12298 Super Poker II(FFT)
- UVA 12298 Super Poker II (FFT + long double)
- uva_12298 Super Jokwe II(FFT)
- UVA 12298 (FFT)
- UVA 10795 A Different Task(递归 状态转移)
- uvalive 6886 Flowery Trails fft
- UVa 699 - The Falling Leaves【递归】
- UVa 548 - Tree【二叉树的递归遍历(DFS)】
- FFT(快速傅里叶变换):UVAoj 12298 - Super Poker II
- UVA 750 八皇后·(2)+ 预处理+递归
- UVa 839 Not so Mobile(树的递归输入)
- UVA-11988 Broken Keyboard (a.k.a. Beiju Text) (链表 或 递归)
- uva 12627 - Erratic Expansion(递归求解)
- 例题8-12 UVA - 12627 Erratic Expansion 奇怪的气球膨胀 (递归)
- UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
- UVA 10518 How Many Calls(求计算Fibonacci数列第n项时递归调用次数)
- Uva297 Quadtrees【递归建四分树】【例题6-11】
- Brackets sequence UVA - 1626 (典型的区间dp+递归打印路径)