fzu2015
http://fayaa.com/code/view/27362/raw/
#include<iostream> #include<cstdio> using namespace std; __int64 jc[210],mod=1000000007; __int64 exgcd(__int64 a,__int64 b,__int64 &x,__int64 &y){ if(b==0) return x=1,y=0,a; __int64 res=exgcd(b,a%b,y,x); y-=a/b*x; return res; } __int64 Inv(__int64 a,__int64 mod){ __int64 x,y; exgcd(a,mod,x,y); return (x%mod+mod)%mod; } __int64 C(int n,int m) { if(n==m) return 1; if(m==0) return 1; if(m==1) return n; __int64 d=jc[m]*jc[n-m]%mod; return jc[n]*Inv(d,mod)%mod; } int main() { int i,j,k,N,M,n; for(jc[1]=1,i=2;i<=200;i++) jc[i]=jc[i-1]*i%mod;//printf("%I64d\n",C(1,1)); while(scanf("%d%d",&N,&M)!=EOF) { n=N/2+1; __int64 ans=0; for(i=n;i<=N;i++) ans+=C(2*N-i-2,N-2)%mod; if(M==-1) ans=C(N+N-1,N-1)%mod-N*ans%mod; printf("%I64d\n",(ans%mod+mod)%mod); } return 0; }