瞬间移动
Source
题意:
手动尝试几组数据,会发现其实就是杨辉三角,也就是组合问题,
不过在求解的时候,涉及到除法运算,求模运算不支持除法,因此用逆元进行处理....
求n的组合数(第n行的杨辉三角数)的递推式为:
c[0]=1;
c[i]=c[i-1]*(n-i+1)/i (1<=i<=n)
/*
http://blog.csdn.net/liuke19950717
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll maxn=1000005;
const ll mod=1000000007;
ll x[maxn];
void extgcd(ll a,ll b,ll &x, ll &y)
{
if(!b)
{
x=1;y=0;
return;
}
extgcd(b,a%b,y,x);
y-=(a/b)*x;
}
ll inv(ll a,ll n)
{
ll x,y;
extgcd(a,n,x,y);
return (x+n)%n;
}
int main()
{
ll n,m;
while(~scanf("%lld%lld",&n,&m))
{
memset(x,0,sizeof(x));
ll s=n+m-4;
x[0]=1;
for(ll i=1;i<=s;++i)
{
x[i]=(x[i-1]*(s-i+1))%mod;
x[i]=(x[i]*inv(i,mod))%mod;
}
printf("%I64d\n",x[m-2]);
}
return 0;
}