XDOJ_1149_容斥原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XDOJ_1149_容斥原理相关的知识,希望对你有一定的参考价值。
http://acm.xidian.edu.cn/problem.php?id=1149
真的厉害,虽然不知道这原理怎么证明的,预处理阶乘和逆元。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define MOD (long long)(1e9+7) #define LL long long using namespace std; LL fac[2000005],inv[2000005],n,m,k; LL PowerMod(LL a, LL b, LL c) { LL ans = 1; a = a % c; while(b) { if(b&1) ans = (ans*a)%c; b = b>>1; a = (a*a)%c; } return ans; } inline LL c(LL n,LL m) { if(m > n) return 0; return fac[n]*inv[m]%MOD*inv[n-m]%MOD; } int main() { fac[0] = 1; for(int i = 1;i <= 2000000;i++) fac[i] = fac[i-1]*i%MOD; inv[2000000] = PowerMod(fac[2000000],MOD-2,MOD); for(int i = 1999999;i >= 0;i--) inv[i] = inv[i+1]*(i+1)%MOD; while(~scanf("%lld%lld%lld",&n,&m,&k)) { LL ans = c(n+m-1,m),x = -1; for(int i = 1;i <= n;i++,x = -x) { LL t = m-i*(k+1); if(t < 0) break; ans = (ans+x*(c(n,i)*c(n+t-1,t)%MOD)+MOD)%MOD; } printf("%lld\n",ans); } return 0; }
以上是关于XDOJ_1149_容斥原理的主要内容,如果未能解决你的问题,请参考以下文章