题目大意:
给你n个块,m种颜色,让你涂颜色,要求最后相邻砖块颜色不同的情况总数为k,问你有多少种图法
解题思路:
n个砖块间总共有n-1个间隔,从n-1个间隔中选出k个间隔,这k个间隔相邻的两端砖块颜色不同,其他间隔两端砖块颜色相同,可以看成是给k+1个砖块涂颜色,相邻砖块颜色互不相同
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int c[2020][2020],n,m,k;
const int mod=998244353;
int fastexp(int base,int x)
{
int res=1;
while(x)
{
if(x&1)
{
res*=base;
res%=mod;
}
x>>=1;
cout<<base<<endl;
base=base*base%mod;
}
return res;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
c[0][0]=1;
for(int i=1;i<=n;++i)
{
c[i][0]=1;
for(int j=1;j<=i;++j)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
int ans=c[n-1][k];
int temp=k+1;
ans=ans*m%mod;
temp--;
ans=ans*fastexp(m-1,temp)%mod;
printf("%d",ans);
return 0;
}
注意mod比较大,可能会炸int