AtCoder Beginner Contest 167 E.Colorful Blocks

AtCoder Beginner Contest 167 E.Colorful Blocks

题目链接
AtCoder Beginner Contest 167 E.Colorful Blocks_第1张图片
数学题,就看你能不能推出公式了~
下面对 k k k 做考虑:
我们考虑选择一种颜色填充 k + 1 k+1 k+1 个位置,那么剩下的 n − k − 1 n-k-1 nk1 个位置可以任填 m − 1 m-1 m1 种颜色,这样考虑就对了一大半了,再考虑那 k + 1 k+1 k+1 个位置的选取即可,AC代码如下:

#include
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll n,m,k,ans=0,tmp=1;
ll power(ll a,ll b) {return b?power(a*a%mod,b/2)*(b%2?a:1)%mod:1;}
int main()
{
    cin>>n>>m>>k;
    for(ll i=0;i<=k;i++){
        ans=(ans+(tmp*m%mod)*power(m-1,n-i-1))%mod;
        tmp=tmp*(n-i-1)%mod*power(i+1,mod-2)%mod;
    }
    cout<<ans;
    return 0;
}

你可能感兴趣的:(AtCoder,思维,数论)