#排列组合#CF1081C Colorful Bricks
作者:互联网
题目
一共 \(n\) 块砖排成一排,把每块砖涂成 \(m\) 种颜色中的一种,
其中恰有 \(k\) 块颜色与其左边的那块砖不同(不包括第一块),问涂色方案数,对 \(998244353\) 取模。
分析
先钦定第一块的颜色,题意也就是分为\(k+1\)个颜色段,
这可以用隔板法实现,也就是\(C(n-1,k)\)
然后后面\(k\)段就可以在剩余\(m-1\)种颜色中选择,
所以最后答案就是\(m*C(n-1,k)*(m-1)^k\)
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int mod=998244353;
inline signed ksm(int x,int y){
rr int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
inline signed C(int n,int m){
rr int mn=m<n-m?m:n-m,mx=n-mn;
rr int ans0=1,ans1=1,ans=1;
for (rr int i=1;i<=n;++i){
ans=1ll*ans*i%mod;
if (mn==i) ans0=ksm(ans,mod-2);
if (mx==i) ans1=ksm(ans,mod-2);
}
return 1ll*ans*ans0%mod*ans1%mod;
}
signed main(){
rr int n,m,k; scanf("%d%d%d",&n,&m,&k);
return !printf("%d",1ll*m*ksm(m-1,k)%mod*C(n-1,k)%mod);
}
标签:CF1081C,Colorful,rr,Bricks,x%,int,1ll,ans,mod 来源: https://www.cnblogs.com/Spare-No-Effort/p/14485473.html