首页 > 代码库 > 【codeforces 768F】 Barrels and boxes
【codeforces 768F】 Barrels and boxes
http://codeforces.com/problemset/problem/768/F (题目链接)
题意
A,B两种物品可以装到栈中,每个栈只能存放一种物品,容量没有限制。现在讲所有栈排成一列,AB相间,问存B的栈长大于H的概率。
Solution
震惊!F竟是个大水题。。。枚举长度隔板法搞一搞就好了。。
细节
注意判0分成0组的情况?LL
代码
// codeforces768F#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>#define LL long long#define inf 2147483640#define MOD 1000000007#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);using namespace std;const int maxn=100010;LL fac[maxn],ifac[maxn];int F,W,H,n;LL P,Q;LL C(LL n,LL m) { if (n==m && n==-1) return 1; return n<0||m<0||n<m ? 0 : fac[n]*ifac[m]%MOD*ifac[n-m]%MOD;}LL power(LL a,LL b) { LL res=1; while (b) { if (b&1) (res*=a)%=MOD; b>>=1;(a*=a)%=MOD; } return res;}int main() { scanf("%d%d%d",&F,&W,&H); n=F+W; fac[0]=1;for (int i=1;i<=100000;i++) fac[i]=fac[i-1]*i%MOD; ifac[100000]=power(fac[100000],MOD-2); for (int i=100000;i;i--) ifac[i-1]=ifac[i]*i%MOD; for (int i=1;i<=n;i++) { int w=(i&1) ? 1 : 2; for (int j=i>>1;j<=(i+1)>>1;j++) { LL q=C(F-1,j-1)*C(W-1,i-j-1)%MOD*w%MOD; LL p=C(F-1,j-1)*C(W-1LL*(i-j)*H-1,i-j-1)%MOD*w%MOD; (Q+=q)%=MOD,(P+=p)%=MOD; } } printf("%lld",P*power(Q,MOD-2)%MOD); return 0;}
【codeforces 768F】 Barrels and boxes
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。