【XSY2332】Randomized Binary Search Tree 概率DP FFT
来源:互联网 发布:离岸金融中心 知乎 编辑:程序博客网 时间:2024/06/07 01:37
题目描述
题解
设
枚举一个点左子树大小
。这个东西是个卷积,可以用FFT加速。
其实期望树高是
时间复杂度:
代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<ctime>#include<utility>#include<cmath>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> pii;double pi=acos(-1);struct cp{ double x,y; cp(double a=0,double b=0) { x=a; y=b; }};cp operator +(cp a,cp b){ return cp(a.x+b.x,a.y+b.y);}cp operator -(cp a,cp b){ return cp(a.x-b.x,a.y-b.y);}cp operator *(cp a,cp b){ return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}cp operator /(cp a,double b){ return cp(a.x/b,a.y/b);}namespace fft{ cp w1[100010]; cp w2[100010]; int rev[100010]; int n; void init(int m) { n=1; while(n<=m) n<<=1; int i; for(i=2;i<=n;i<<=1) { w1[i]=cp(cos(2*pi/i),sin(2*pi/i)); w2[i]=cp(cos(2*pi/i),-sin(2*pi/i)); } rev[0]=0; for(i=1;i<n;i++) rev[i]=(rev[i>>1]>>1)|(i&1?n>>1:0); } void fft(cp *a,int t) { int i,j,k; cp u,v,w,wn; for(i=0;i<n;i++) if(rev[i]<i) swap(a[i],a[rev[i]]); for(i=2;i<=n;i<<=1) { wn=(~t?w1[i]:w2[i]); for(j=0;j<n;j+=i) { w=1; for(k=j;k<j+i/2;k++) { u=a[k]; v=a[k+i/2]*w; a[k]=u+v; a[k+i/2]=u-v; w=w*wn; } } } if(t==-1) for(i=0;i<n;i++) a[i]=a[i]/n; }}cp a[100010];double f[110][30010];double ans[30010];int main(){ freopen("b.in","r",stdin); freopen("b.out","w",stdout); int n; scanf("%d",&n); int m=100; int i,j; fft::init(2*n); a[0]=a[1]=1; double last; for(i=0;i<n;i++) ans[i]=0; last=ans[0]=a[n].x; for(i=1;i<=m;i++) { fft::fft(a,1); for(j=0;j<fft::n;j++) a[j]=a[j]*a[j]; fft::fft(a,-1); for(j=fft::n-1;j>=1;j--) a[j]=a[j-1]; a[0]=a[1]=1; for(j=2;j<=n;j++) a[j]=a[j]/j; for(j=n+1;j<fft::n;j++) a[j]=0; ans[i]=a[n].x-last; last=a[n].x; }// for(i=0;i<=m;i++)// f[i][1]=f[i][0]=1;// for(i=1;i<=m;i++)// for(j=2;j<=n;j++)// for(k=1;k<=j;k++)// f[i][j]+=f[i-1][k-1]*f[i-1][j-k]/j;// for(i=0;i<=m;i++)// {// ans[i]=f[i][n];// if(i>=1)// ans[i]-=f[i-1][n];// } for(i=0;i<=n-1;i++) printf("%.10lf\n",ans[i]); return 0;}
阅读全文
0 0
- 【XSY2332】Randomized Binary Search Tree 概率DP FFT
- UVALive 4847 Binary Search Tree【树型dp】
- uva 10304 Optimal Binary Search Tree(DP)
- Optimal Binary Search Tree+区间dp+uva
- 【Leetcode】Unique Binary Search Tree II (DP)
- uva-10304 Optimal Binary Search Tree(区间dp)
- uva 10304 - Optimal Binary Search Tree(区间dp)
- uva 10304 Optimal Binary Search Tree(区间dp)
- 小白dp uva 10304 - Optimal Binary Search Tree
- UVa 10304 Optimal Binary Search Tree / 区间DP
- uva 10304 Optimal Binary Search Tree(dp)
- UVA - 10304 Optimal Binary Search Tree 区间DP
- UVA 10304 Optimal Binary Search Tree (区间dp)
- 区间dp(uva10304-Optimal Binary Search Tree)
- uva 10304 Optimal Binary Search Tree (区间DP)
- uva 10304 - Optimal Binary Search Tree(区间dp)
- search - binary search/sort tree
- Implement Binary Search Tree
- UVA 1349 Optimal Bus Route Design——最小权完美匹配
- ARM TrustZone技术简介(三)(BL31 Secure Monitor简介)
- 链表划分
- Android应用开发—浅谈MVX模式
- 2016 JAG E Similarity of Subtrees(hash)
- 【XSY2332】Randomized Binary Search Tree 概率DP FFT
- 一个有趣的统计
- linux常用命令
- 【Django】不能通过IP访问Docker容器里的Django服务器
- java学习记录——打印9X9乘法表
- 【牛客】CPU的运算速度与许多因素有关,下面______是提高速度的有效措施?
- 单调队列--poj2823 Sliding Window
- 2017.10.8
- ARM TrustZone技术简介(四)(TrustOS)