这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
2020-2021:teams:namespace:牛客多校第五场 [2020/07/28 22:25] great_designer [做法] |
2020-2021:teams:namespace:牛客多校第五场 [2020/07/28 22:34] (当前版本) great_designer [代码] |
||
|---|---|---|---|
| 行 486: | 行 486: | ||
| 由于在xy项中指数相等,在x^{N-K}y^{M-K}里面的贡献,差值必然由前面来提供。因此多项式中x^{N-K}y^{M-K}项前的系数为: | 由于在xy项中指数相等,在x^{N-K}y^{M-K}里面的贡献,差值必然由前面来提供。因此多项式中x^{N-K}y^{M-K}项前的系数为: | ||
| - | $$\sum_{t=0}^{\min(N,M)-K} C_{K-1+t}^{K-1}C_{N-1+t}^{K-1}C_{M-1+t}^{K-1}$$ | + | $$\sum_{t=0}^{\min(N,M)-K} C_{K-1+t}^{K-1}C_{N-1-t}^{K-1}C_{M-1-t}^{K-1}$$ |
| 为所求答案。 | 为所求答案。 | ||
| 行 498: | 行 498: | ||
| <hidden> | <hidden> | ||
| <code C> | <code C> | ||
| - | |||
| #include<stdio.h> | #include<stdio.h> | ||
| 行 507: | 行 506: | ||
| int C(int n,int m) | int C(int n,int m) | ||
| { | { | ||
| - | return 1ll*fac[n]*ffac[m]%mod*ffac[n-m]%mod; | + | return ((1ll*fac[n]*ffac[m])%mod*ffac[n-m])%mod; |
| } | } | ||
| int qpow(int n,int k) | int qpow(int n,int k) | ||
| { | { | ||
| - | int ret = 1; | + | int ret=1; |
| while(k) | while(k) | ||
| { | { | ||
| if(k&1) | if(k&1) | ||
| { | { | ||
| - | ret = 1ll * ret * n % mod; | + | ret=(1ll*ret*n)%mod; |
| } | } | ||
| - | n = 1ll * n * n % mod; | + | n=(1ll*n*n)%mod; |
| - | k /= 2; | + | k/=2; |
| } | } | ||
| return ret; | return ret; | ||
| } | } | ||
| - | int main() | + | void init() |
| { | { | ||
| - | fac[0] = 1; | + | fac[0]=1; |
| - | int i; | + | int i; |
| - | for(i = 1; i <= 2e6; i++) | + | for(i=1;i<=2e6;i++) |
| { | { | ||
| - | fac[i] = 1ll * fac[i-1] * i % mod; | + | fac[i]=(1ll*fac[i-1]*i)%mod; |
| } | } | ||
| - | ffac[2000000] = qpow(fac[2000000], mod - 2); | + | ffac[2000000]=qpow(fac[2000000],mod-2); |
| - | for(i = 2e6; i >= 1; i--) | + | for(i=2e6;i>=1;i--) |
| { | { | ||
| - | ffac[i - 1] = 1ll * ffac[i] * i % mod; | + | ffac[i-1]=(1ll*ffac[i]*i)%mod; |
| } | } | ||
| + | } | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | init(); | ||
| int T; | int T; | ||
| - | scanf("%d", &T); | + | scanf("%d",&T); |
| while(T--) | while(T--) | ||
| { | { | ||
| - | int N, M, K; | + | int N,M,K; |
| - | scanf("%d%d%d", &N, &M, &K); | + | scanf("%d%d%d",&N,&M,&K); |
| - | int ans = 0; | + | int ans=0; |
| - | for(i = 0; i <=(N<M?N:M) - K; i++) | + | int i; |
| + | for(i=0;i<=(N<M?N:M)-K;i++) | ||
| { | { | ||
| - | ans += 1ll * C(i + K - 1, K - 1) * C(N - i - 1, K - 1) % mod * C(M - i - 1, K - 1) % mod; | + | ans+=((1ll*C(i+K-1,K-1)*C(N-i-1,K-1))%mod*C(M-i-1,K-1))%mod; |
| - | if(ans >= mod) | + | ans-=(ans>=mod)?mod:0; |
| - | { | + | |
| - | ans -= mod; | + | |
| - | } | + | |
| } | } | ||
| printf("%d\n",ans); | printf("%d\n",ans); | ||