D题
生成函数,计数问题
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e6+10; const int mod=1e9+7; int T,n,m; ll f[N]; ll qmod(ll x,ll y) { ll ans=1; while(y) { if(y&1)ans=ans*x%mod; y>>=1; x=x*x%mod; } return ans; } int main() { scanf("%d",&T); f[0]=1; for(int i=1;i<=N;++i) f[i]=f[i-1]*i%mod; while(T--) { scanf("%d%d",&n,&m); ll ans1=0,ans2=0; ans1=f[n+m]*qmod(f[n]*f[m]%mod,mod-2)%mod; if(m-1>=n) ans2=f[m-1]*qmod(f[n]*f[m-1-n]%mod,mod-2)%mod; printf("%lld ",(ans1-ans2+mod)%mod); } return 0; }