NC204088. 病毒扩散
描述
输入描述
第一行一个正整数,表示特殊点的数量。
接下来 行,每行三个非负整数 ,表示有一个特殊的点在 ,牛牛想知道在时刻 这个点有多少感染者。
输出描述
对于每一个特殊的点,输出一行一个非负整数,表示在 时刻这个点的感染者数量,对 998244353 取模。
示例1
输入:
3 0 0 1 1 1 2 2 0 2
输出:
1 2 1
说明:
见题目描述中的图片。示例2
输入:
5 5 5 7 2 7 9 0 14 14 0 14 15 14 29 100
输出:
0 36 1 15 891148910
C++14(g++5.4) 解法, 执行用时: 180ms, 内存消耗: 69580K, 提交时间: 2020-04-25 14:22:27
#include<bits/stdc++.h> using namespace std; const int mod=998244353,N=5e3; typedef long long ll; int c[N+5][N+5]; void fun(){ for(int i=0;i<=N;i++) c[i][0]=c[i][i]=1; for(int i=2;i<=N;i++) for(int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } int main(){ fun(); int n; scanf("%d",&n); while(n--){ int x,y,t; scanf("%d%d%d",&x,&y,&t); printf("%lld\n",(ll)c[t][x+y]*c[x+y][x]%mod); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 302ms, 内存消耗: 69408K, 提交时间: 2020-05-07 11:48:58
#include<iostream> using namespace std; const int M=998244353,N=5e3; #define ll long long int c[N+5][N+5],n,x,y,t; int main() { for(int i=0;i<=N;i++) c[i][0]=c[i][i]=1; for(int i=2;i<=N;i++) for(int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%M; cin>>n; while(n--) { cin>>x>>y>>t; cout<<((ll)c[t][x+y]*c[x+y][x]%M)<<endl; } }