B 病毒扩散 组合数

题目链接:https://ac.nowcoder.com/acm/contest/5205/B

 

 自我感觉这个模型挺难想的。。。另外还有一种杨辉三角的解法。。也不是很懂。。

这道题在组合数方面需要用到逆元

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int w=1e6+5;
 5 const ll mod=998244353;
 6 ll fac[10005],ni[10005];
 7 ll quick(ll x,ll y)
 8 {
 9     ll ans=1;
10     while(y)
11     {
12         if(y&1)
13             ans=ans*x%mod;
14         x=x*x%mod;
15         y/=2;
16     }
17     return ans;
18 }
19 ll C(ll x,ll y)
20 {
21     ll ans=1;
22     ans=fac[x]*ni[y]%mod*ni[x-y]%mod;
23     return ans;
24 }
25 int main()
26 {
27     int i,j;
28     int n;
29     cin>>n;
30     fac[0]=1,ni[0]=1;
31     for(i=1;i<10005;i++)
32         fac[i]=fac[i-1]*i%mod;
33     ni[10004]=quick(fac[10004],mod-2);
34     for(i=10003;i>=0;i--)
35         ni[i]=ni[i+1]*(i+1)%mod;
36     while(n--){
37         int x,y,z;
38         scanf("%d%d%d",&x,&y,&z);
39         //x++,y++,z+=2;
40         int u=x+y;
41         if(u>z)
42         {
43             puts("0");
44             continue;
45         }
46         ll ans=C(z,u)*C(u,x)%mod;
47         printf("%lld\n",ans);
48     }
49     return 0;
50 }
View Code

 

posted @ 2020-05-16 15:31  古比  阅读(132)  评论(0编辑  收藏  举报