本题考查了求组合数,隔板法的应用,非常经典,必须掌握。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e9+7;
int x,y; int jc[2500];
int inv(int x,int mod)
{
int ans=1;
while(mod)
{
if(mod&1) ans=ans*x%M;
x=x*x%M;
mod=mod>>1;
}
return ans;
}
int C(int x,int y) //C(x,y)=x!/(y!(x-y)!)
{
if(x<0||x-y<0) return 0;
int res;
// for(int i=x;i>=1;i--)
// {
// res=res*i%M;
// }
// int a=1;
// for(int i=y;i>=1;i--)
// {
// a=a*i%M;
// }
// int b=1;
// for(int i=x-y;i>=1;i--)
// {
// b=b*i%M;
// }
//cout<<a<<" "<<b<<" ";
res=jc[x]*inv(jc[x-y],M-2)%M*inv(jc[y],M-2)%M;
return res;
}
signed main()
{
cin>>x>>y;
/*预处理阶层*/
jc[0]=1;
for(int i=1;i<=2050;i++)
{
jc[i]=jc[i-1]*i%M;
}
for(int i=1;i<=x+y;i++)
{
//隔板法 :组合+乘法原理
int ji=i/2+i%2,ou=i/2;
cout<<(C(x-1,ji-1)*C(y-1,ou-1)+C(y-1,ji-1)*C(x-1,ou-1))%M<<'\n';
}
}