B-病毒扩散

病毒扩散

http://www.nowcoder.com/questionTerminal/2204cb3b0ea44f0f9f0fb86b3cac26c9

数学方法推一下:
我们枚举出t=1-5秒内的变化人数图
当t=1时:
1
1 1
t=2时:
1
2 2
1 2 1
t=3s
1
3 3
3 6 3
1 3 3 1
t=4时
1
4 4
6 12 6
4 12 12 4
1 4 6 4 1
我们发现当时间为t时,第n斜行的数为 ,所以每个位置的感染者数也就出来了,自己推一下也很简单

#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=5005;
const int mod=998244353;
int ans[maxn][maxn];
int cnt[10000];
int main(){
    ans[0][0]=1,ans[1][0]=1,ans[0][1]=1;
    for(int i=1;i<5001;++i){ans[i][0]=1,ans[0][i]=1;}
    for(int i=1;i<5001;++i)
        for(int j=1;j<5001;++j)
        ans[i][j]=(ans[i-1][j]+ans[i][j-1])%mod;
    int n;
    cin>>n;
    while(n--){
        int x,y,t;
        cin>>x>>y>>t;
        if(x+y>t){
            cout<<"0"<<endl;
            continue;
        }
        ll res=(ll)ans[t-x-y][x+y]*ans[x][y]%mod;
        cout<<res<<endl;
    }
} 
全部评论

相关推荐

5 收藏 评论
分享
牛客网
牛客企业服务