ABC167E题解
Colorful Blocks
题意
题面有点雾,应为:“
思路
考虑恰好有
考虑捆绑法:把相邻的两个颜色相同的方格捆绑成一个方格来看。此时只剩下了
在
把
根据乘法原理,情况为
那么最终答案就是:
代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k,mod=998244353,ans,fac[200005];
int qpow(int x,int y)
{
int ret=1;
for(;y;y>>=1,x=x*x%mod)
{
if(y&1)
ret=ret*x%mod;
}
return ret;
}
void init()//初始化
{
fac[0]=1;
for(int i=1;i<=n;i++)
{
fac[i]=fac[i-1]*i%mod;
}
}
int inv(int x)
{
return qpow(fac[x],mod-2);//逆元
}
int C(int x,int y)
{
return fac[x]*inv(y)%mod*inv(x-y)%mod;//求组合数
}
signed main()
{
scanf("%lld%lld%lld",&n,&m,&k);
init();
for(int i=0;i<=k;i++)
{
ans=(ans+C(n-1,i)*m%mod*qpow(m-1,n-i-1)%mod)%mod;//统计答案
}
printf("%lld",ans);
}
希望本篇题解能帮到大家!!!