51nod 1627 瞬间移动

来源:互联网 发布:笨办法学python习题26 编辑:程序博客网 时间:2024/05/03 09:56

ans=sum( C(n-2,i) * C(m-2,i) )

然后求下逆元就好了。

#include<bits/stdc++.h>using namespace std;const long long mod=1e9+7;const int MAXN=100100;long long fac[MAXN],inv[MAXN];long long powmod(long long x,long long p){long long ret=1;while(p){if(p&1)ret=ret*x%mod;x=x*x%mod;p>>=1;}return ret;}long long C(long long n,long long m){if(m>n)return 0;return fac[n]*inv[n-m]%mod*inv[m]%mod;}int main(){long long n,m,i,ans;fac[0]=inv[0]=1;for(i=1;i<MAXN;i++){fac[i]=i*fac[i-1]%mod;inv[i]=powmod(fac[i],mod-2);}while(~scanf("%lld%lld",&n,&m)){ans=0;for(i=0;i<=min(n,m)-2;i++)ans=(ans+C(n-2,i)*C(m-2,i)%mod)%mod;printf("%lld\n",ans);}}


0 0
原创粉丝点击