排列组合 、 逆元、快速幂
题目来源:中北大学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;
}