2014 xi'an Problem F. Color (Gym 100548F) 容斥原理
2016-09-30 13:36
363 查看
题意:给出n个需要涂色的格子排成一列,有m种颜色,需要从中选出k种颜色,使得任意两个相邻格子不同色。
(n、m<=1e9,k<=1e6)
解法:
容斥原理,首先能想到计算C(m,k),之后考虑的问题是现在用恰好k种颜色去涂色。
首先k*pow(k-1,n)表示的是至多用k种颜色的种数,然后如果想得到恰好用k种颜色的方案数,就用容斥原理,奇加偶减。
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<vector> using namespace std; #define all(x) (x).begin(), (x).end() #define for0(a, n) for (int (a) = 0; (a) < (n); (a)++) #define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++) #define mes(a,x,s) memset(a,x,(s)*sizeof a[0]) #define mem(a,x) memset(a,x,sizeof a) #define ysk(x) (1<<(x)) typedef long long ll; typedef pair<int, int> pii; const int INF =0x3f3f3f3f; const int maxK=1e6+0.5 ; const ll mod=1e9+7; ll N,M,K; ll inv[maxK+10],C[maxK+10]; ll qb(ll a,ll n) { ll ans=1; while(n) { if(n&1) ans=ans*a%mod; a=a*a%mod; n>>=1; } return ans; } void pre() { C[0]=1; for1(i,K)//C(K,i) { C[i]=C[i-1]*(K-i+1)%mod*inv[i]%mod; } } ll calC(ll n,ll m) { ll ans=1; for1(i,m) { ans=ans*(n-i+1)%mod*inv[i]%mod; } return ans; } void solve() { ll ans=0,ret=1; pre(); for(int i=K;i>=1;i--) { ans+=ret*C[i]*i%mod*qb(i-1,N-1)%mod; ans=(ans%mod+mod)%mod; ret*=-1 ; } ans*=calC(M,K); ans=(ans%mod+mod)%mod; printf("%lld\n",ans); } void init() { inv[0]=1; for1(i,maxK) inv[i]=qb(i,mod-2); } int main() { std::ios::sync_with_stdio(false); init(); int T,kase=0;cin>>T; while(T--) { cin>>N>>M>>K; printf("Case #%d: ",++kase); pre(); solve(); } return 0; }
相关文章推荐
- 【最短路】BAPC2014 B Button Bashing (Codeforces GYM 100526)
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
- gym 101512 BAPC 2014 I Interesting Integers
- 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix,hdu 5015
- [HDU 5107][2014 ACM/ICPC Asia Regional Xi'an Online]Ellipsoid(爬山)
- 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)
- gym 101512 BAPC 2014 B Button Bashing
- hdu 5015 233 Matrix 2014 ACM/ICPC Asia Regional Xi'an Online 矩阵快速幂
- hdu 5015 233 Matrix 矩阵快速幂 2014 ACM/ICPC Asia Regional Xi'an Online
- 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
- hdu 5014 Number Sequence 找规律 | 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- cf/Codeforces Gym 100548F Color (2014年西安站F题) (容斥原理)
- HDU 5009 DP (2014 ACM/ICPC Asia Regional Xi'an Online)题解
- 2014 ACM/ICPC Asia Regional Xi'an Online
- Codeforces gym 2013-2014 Samara SAU ACM ICPC Quarterfinal Qualification Contest
- gym 100543 CERC 4000 2014 L Outer space invaders
- 【bzoj3505】[Cqoi2014]数三角形 容斥原理
- 【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)