牛客 病毒扩散

链接: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 }
View Code

猜你喜欢

转载自www.cnblogs.com/winfor/p/13192294.html