Codeforces Colorful Bricks(組合數)

在這裏插入圖片描述
題目大意:
給你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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章