当前位置: 代码迷 >> 综合 >> 51Nod 1119 机器人走方格 V2
  详细解决方案

51Nod 1119 机器人走方格 V2

热度:4   发布时间:2023-12-01 21:24:38.0

题目传送门
结果是C(n+m-2,n-1)或者C(n+m-2,m-1)
为什么?只能向下或者向右走,所以一共n+m-2步
我们要选择其中的n-1步向下
或者我们要选择其中的m-1步向右
代码:

#include<bits/stdc++.h>
using namespace std;typedef long long LL;
const int maxn=2000000+100;
const int mod=1e9+7;LL mypow(LL a,LL b){LL sum=1;while(b){if(b&1) sum=sum*a%mod;a=a*a%mod;b>>=1;}return sum;
} LL fac[maxn],inv[maxn];void init(int M){fac[0]=1;for(int i=1;i<=M;i++) fac[i]=fac[i-1]*i%mod;inv[M]=mypow(fac[M],mod-2);for(int i=M-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}LL C(int n,int m){return fac[n]*inv[m]%mod*inv[n-m]%mod;
}int main(){int n,m;scanf("%d%d",&n,&m);init(n+m);printf("%lld\n",C(n+m-2,n-1));
}