列表

详情


NC15251. 白兔的式子

描述

已知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)

示例1

输入:

2
2 3 3 3
3 1 4 1

输出:

9
27

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 117ms, 内存消耗: 2944K, 提交时间: 2018-03-09 20:55:30

# include <bits/stdc++.h>
# define N 100010
# define M 998244353
using namespace std;
int a,b,n,m;
int jc[N];
int qpow(int x,int n,int d=1){
    for ( ;n;n>>=1,x=1ll*x*x%M) if (n&1) d=1ll*d*x%M; return d;
}
void solve(){
    int ans = 1ll*jc[n]*qpow(1ll*jc[n-m]*jc[m]%M,M-2)%M * qpow(a,n-m) % M * qpow(b,m)%M;
    printf("%d\n",ans);
}
int main(){
    int T; scanf("%d",&T);
    jc[0]=1; for (int i=1;i<N;++i)jc[i]=1ll*jc[i-1]*i%M;
    while (T--){
        scanf("%d%d%d%d",&a,&b,&n,&m);
        --n; --m;
        solve();
    }
    return 0;
}

上一题