这数据写个暴力都拿不了30分 T_T。
C(n,i)*C(n,i)=C(n,i)*C(n,n-i) => 结合现实意义,在n个里面选 i 个,再在n个里面选n-i个的方案数。
就等价于在前n个中选 i 个,在后n各种选n-i个。而且i = 0~n => 在2*n各种选n个。
那么=C(2*n,n);
答案要对1000000007取模,需要逆元(可用费马小定理,下面是式子)
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define LL long long
#define MOD 1000000007
#define N 1000000
using namespace std;
int T;
LL ans,P[2000009],n;
void init()
{
LL p=1;
for(LL i=1;i<=2*N;i++) p=(p*i)%MOD,P[i]=p;
}
LL Fast_Pow(LL x,LL p)//x^p
{
LL t1=1,t2=x;
while(p)
{
if(p%2==1) t1=(t1*t2)%MOD;
t2=(t2*t2)%MOD;
p/=2;
}
return t1%MOD;
}
LL get_ans(int x)
{
return (P[2*x]*Fast_Pow(P[x]*P[x]%MOD,MOD-2))%MOD;
}
int main()
{
init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=get_ans(n);
printf("%lld
",ans);
}
return 0;
}