[CF248E]Piglet's Birthday
发布时间:2020-12-14 03:18:31 所属栏目:大数据 来源:网络整理
导读:https://zybuluo.com/ysner/note/1236827 题面 给定 (n) 个货架,初始时每个上面有 (a_i) 个蜜罐。 有 (q) 次操作,每次操作形如 (u,v,k) ,表示从货架 (u) 上任意选择 (k) 个蜜罐试吃(吃过的也还能吃),吃完后把这 (k) 个蜜罐放到 (v) 货
https://zybuluo.com/ysner/note/1236827题面给定 (n) 个货架,初始时每个上面有 (a_i) 个蜜罐。
注意公式[C_n^m=sum_{i=1}^mfrac{n-i+1}{i}] #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #define re register #define il inline #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) #define fp(i,a,b) for(re int i=a;i<=b;i++) #define fq(i,b) for(re int i=a;i>=b;i--) using namespace std; const int mod=1e9+7,N=1e5+100; int n,m,a[N],b[N],Q; double dp[N][115],ans; il ll gi() { re ll x=0,t=1; re char ch=getchar(); while(ch!=‘-‘&&(ch<‘0‘||ch>‘9‘)) ch=getchar(); if(ch==‘-‘) t=-1,ch=getchar(); while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-48,ch=getchar(); return x*t; } il double C(re int x,re int y) { if(x<y) return 0; double res=1; fp(i,1,y) res=res*(x-i+1)/i; return res; } int main() { n=gi();fp(i,n) a[i]=b[i]=gi(),dp[i][a[i]]=1,ans+=dp[i][0]; Q=gi(); while(Q--) { re int u=gi(),v=gi(),k=gi();ans-=dp[u][0]; fp(i,a[u]) { double tmp=0,t=C(b[u],k); fp(j,k) //printf("%lf %lf %lf %lfn",dp[u][i+j],C(i+j,j),C(b[u]-i-j,k-j),t) tmp+=dp[u][i+j]*C(i+j,j)*C(b[u]-i-j,k-j)/t; dp[u][i]=tmp; } b[u]-=k;b[v]+=k;ans+=dp[u][0];printf("%.10fn",ans); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |