NC13884 Paint Box(容斥原理)

有一些常见的模型转换,对于求恰好类型的题目

可以通过转化成不大于的形式。

对于这题,我们转化成不大于的情况后,可以利用容斥原理求出答案

我们定义为用不大于k种颜色染色

这样通过容斥原理就能求出恰好是k的答案。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+10;
const int mod=1e9+7;
int n,m,k;
ll qpow(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1){
            res=res*a%mod;
        }
        b>>=1;
        a=a*a%mod;
    }
    return res;
}
ll c(ll n,ll r){
    if(n<r) return 0;
    if(n-r<r) r=n-r;
    ll a=1,b=1;
    for(int i=0;i<r;i++)
        a=(a*(n-i))%mod,b=(b*(i+1))%mod;
    return a*qpow(b,mod-2)%mod;
}
int main(){
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m>>k;
        ll ans=0;
        ll tmp=1;
        for(int i=k;i>=1;i--){
            ans=(ans+tmp*i%mod*qpow(i-1,n-1)%mod+mod)%mod;
            tmp=-tmp*i%mod*qpow(k-i+1,mod-2)%mod;
        }
        ans=(ans*c(m,k))%mod;
        cout<<ans<<endl;
    }
}
View Code

 

posted @ 2020-11-10 11:19  朝暮不思  阅读(105)  评论(0编辑  收藏  举报