題目鏈接:https://www.nowcoder.com/acm/contest/90/H
思路:這題的關鍵就是要理解C(k,m)的實際意義:從沒有用到的顏色中挑出m個顏色,也就是一個顏色集合,按照題目的描述,是先選出一中染色方案再選出一種顏色集合,也就是說這兩者之間只用滿足一種關係就是染色方案中的顏色沒有顏色屬於這個顏色集合,那麼我們就可以先選擇顏色集合,然後確定染色方案,就是C(n,m) 構成一個顏色集合,然後染色方案中每個球有n-m中顏色可以選擇ksm(n-m,l)
accode
#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
using namespace std;
const int maxn = 1e7+65;
const LL mod = 998244353;
LL n, m,l;
LL jie[maxn];
LL ksm(LL a,LL b)
{
LL ret = 1;
while(b)
{
if(b&1) ret = ret*a%mod%mod%mod;
a = a%mod*a%mod%mod;
b>>=1;
}
return ret%mod;
}
LL C(LL n,LL m)
{
return jie[n]%mod*ksm(jie[n-m]%mod*jie[m]%mod%mod,mod-2)%mod%mod;
}
int main()
{
jie[0] = jie[1] = 1;
for(int i = 2;i<maxn;i++){
jie[i] = jie[i-1]%mod*i%mod%mod;
}
scanf("%lld%lld%lld",&n,&m,&l);
if(n<m){
puts("0");
return 0;
}
//cout<<C(3,2)<<endl;
printf("%lld\n",C(n,m)%mod*ksm(n-m,l)%mod%mod);
}