2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)
題目連結:傳送門
題意:
n個格子排成一行,我們有m種顏色,可以給這些格子塗色,保證相鄰的格子的顏色不同
問,最後恰好使用了k種顏色的方案數。
分析:
看完題目描述之後立馬想到了一個公式 :C(m,k)*k*(k-1)^(n-1),但是仔細分析了一下
這個公式的含義是相鄰的格子顏色不同,使用的顏色總數小於等於k的方案數,但是這個
公式可以幫忙我們衍生出來下面的公式,C(k,x)*x*(x-1)^(n-1),這個公式的含義是在這
k種顏色中再選出來x種使得相鄰的格子不同色最後的顏色數小於等於x,然後每一個集合
都有交們我們可以考慮用容斥來搞一下。
設 S = F[x]=C(k,x)*x*(x-1)^(n-1);
ans = C(m,k) * sigma{ (-1)^(k-i) * C(k,i) * i *(i - 1)^(n-1)} (1 <= i <= k)
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
const int maxn = 1e6+10;
LL n,m,k;
LL c[maxn],inv[maxn];
LL quick_mod(LL a,LL b){
LL ans=1;
while(b){
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans ;
}
inline LL get_inverse(LL x){ //(a/b) % c = a*inv[b] %c if(c is a prime number) inv[b] = (b^(c-2))%c;
return quick_mod(x,mod-2);
}
void init(){//將[1,1e6+10]的逆元預處理出來
for(LL i=1;i<maxn;i++)
inv[i]=get_inverse(i);
}
void get_combine(LL n){//得到組合數
c[0]=1;
for(LL i=1;i<=k;i++){
c[i]=(c[i-1]*(n-i+1)%mod)*inv[i]%mod;
}
}
inline LL calc(LL x){// x*C(k,x)*(x-1)^(n-1)
return (c[x]*x%mod)*quick_mod(x-1,n-1)%mod;
}
int main(){
init();
int t,cas=1;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&k);
get_combine(m);
LL ans = c[k],ans1=0,tag=1;
get_combine(k);
for(LL i=k;i>=1;i--){
ans1=(ans1+tag*calc(i)+mod)%mod;
tag=-tag;
}
ans=ans*ans1%mod;
printf("Case #%d: %lld\n", cas++, ans);
}
return 0;
}
相關文章
- Codeforces Gym 100548F Color (組合數+容斥)
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 容斥原理——數學知識
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- 容斥 + 組合數學 ---Codeforces Round #317 A. Lengthening Sticks
- #19. 計數(容斥原理)
- 容斥原理
- 容斥原理學習筆記筆記
- 【模板】容斥原理
- 容斥原理講解
- 【數學】組合數學 - 排列組合
- 遊戲裡面的容斥原理遊戲
- bzoj 2655: calc [容斥原理 伯努利數]
- HDU 4059 The Boss on Mars ( 容斥原理)
- 組合數學水題 $19$ 道
- HDU 2582 f(n) (組合數的gcd)GC
- 組合數學
- HDU 4135 Co-prime(容斥原理+分解質因數)
- HDU4390Number Sequence(容斥原理)
- HDU4407Sum ( 容斥原理)
- 容斥
- 《小 學 組 合 數 學》
- 組合數問題
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- 【數學】組合數學 - 卡特蘭數
- 2024.4.6 組合數學補題
- 組合數學筆記-排列與組合筆記
- F. Color Rows and Columns
- HDU2841 Visible Trees (容斥原理)
- 「數學」助力每一個不知死活的容斥夢
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 反射容斥反射
- 【學習筆記】組合數學筆記
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- CF2000F Color Rows and Columns 題解
- 組合計數思維題
- bzoj1853: [Scoi2010]幸運數字(容斥原理)