链接:https://ac.nowcoder.com/acm/contest/5205/B
思路:正面想问题 因为随着时间的影响会让人数增长 所以直接从整体考虑
因为这是相当于不同的人走到同一个点的问题 每当有一个人停了一步再走 就相当于这个是后一秒感染的人在走动 所以就相当于
把问题转化成 从0 0 到 x y 用了时间为t的有多少种方案数 (即此时这里有多少个人)
路径的方案数 就是 C(x,x+y) 时间的方案数 随着时间增加 不像路径那样一定要动
所以时间的考虑应该是 可以x+1 可以y+1 也可以保持不动 所以是C(x+y,t) 在t时刻内走动了x+y步
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int maxn=2e6+10; 6 const int mod=998244353; 7 ll C[2005][5005]; 8 9 int main() 10 { 11 ios::sync_with_stdio(false); 12 cin.tie(0); 13 for(int i=0;i<=2000;i++) 14 { 15 for(int j=i;j<=5000;j++) 16 { 17 if(i==0) 18 C[i][j]=1; 19 else 20 { 21 C[i][j]=C[i-1][j-1]+C[i][j-1]; 22 C[i][j]%=mod; 23 } 24 } 25 } 26 int q; 27 cin>>q; 28 while(q--) 29 { 30 int x,y,t; 31 cin>>x>>y>>t; 32 cout<<C[x][x+y]*C[x+y][t]%mod<<'\n'; 33 } 34 35 36 37 38 }