排列组合 、 逆元、快速幂

题目来源:中北大学2019年新生赛
题目:
   请构造一个长度为n的非严格递增序列,序列中每个元素大小都属于[1, m],但是这个问题太简单了,于是cy想知道有多少种合法的方案数,并且由于答案可能很大,故你需要将答案取模998244353

输入:

输出:

样例:

输入:                                                    输出:
     3 3                                                       3

比赛时候傻了,没想到。赛后一想,这题就是个思维题,推出公式dp和排列组合都能过。
这里拿排列组合写,推出组合公式

#include<stdio.h>
#define ll long long
#define mod 998244353
ll mul(ll n){
    ll ans = 1;
    for(int i = 1; i <= n; i++){
        ans = (ans * i) % mod;
    }
    return ans % mod;
}
long long quick_pow(ll a, ll b) {
    if (b < 0)
        return 0;
    ll ret = 1;
    a %= mod;
    while(b) {
        if (b & 1)
            ret = (ret * a) % mod;
        b >>= 1;
        a = (a * a) % mod;
    }
    return ret % mod;
}
int main()
{
    ll n, m;
    scanf("%lld%lld", &n, &m);
    ll x = mul(n + m - 1);
    ll y = mul(m - 1);
    ll z = mul(n);
    y = (y * z) % mod;
    z = quick_pow(y, mod - 2);
    z %= mod;
    ll ans = (x * z) % mod;
    printf("%lld\n", ans);
    return 0;
}