链接:https://www.nowcoder.com/acm/contest/73/B
来源:牛客网
白兔的式子
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
已知
f[1][1]=1,f[i][j]=a*f[i-1][j]+b*f[i-1][j-1](i>=2,1<=j<=i)。
对于其他情况f[i][j]=0
有T组询问,每次给出a,b,n,m,求f[n][m] mod (998244353)
输入描述:
第一行为一个整数T,表示询问个数。 接下来一共T行,每行四个整数a,b,n,m。
输出描述:
一共T行,每行一个整数,表示f[n][m] mod (998244353)
#include <bits/stdc++.h> using namespace std; const long long Mod = 998244353; long long mi[100010], ni[100010]; long long Pow(long long a, long long b) { long long ans = 1; while (b) { if (b & 1) (ans *= a) %= Mod; b >>= 1; (a *= a) %= Mod; } return ans; } int main() { int T; scanf("%d", &T); mi[0] = ni[0] = 1; for (int i = 1; i <= 100000; ++i) mi[i] = (mi[i - 1] * i) % Mod; for (int i = 1; i <= 100000; ++i) ni[i] = Pow(mi[i], Mod - 2); while (T --) { long long a, b, n, m; scanf("%lld%lld%lld%lld", &a, &b, &n, &m); long long ans = mi[n - 1]; (((ans *= ni[m - 1]) %= Mod) *= ni[n - m]) %= Mod; (((ans *= Pow(a, n - m)) %= Mod) *= Pow(b, m - 1)) %= Mod; printf("%lld\n", ans); } return 0; }