#排列组合#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);
} 
上一篇:[POI2002][HAOI2007]反素数 题解


下一篇:10月4日模拟赛题解