百度之星2016練習賽 瞬間移動

System Message (命題人)
基準時間限制:1 秒 空間限制:131072 KB 分值: 80

有一個無限大的矩形,初始時你在左上角(即第一行第一列),每次你都可以選擇一個右下方格子,並瞬移過去(如從下圖中的紅色格子能直接瞬移到藍色格子),求到第n行第m列的格子有幾種方案,答案對1000000007取模。


Input
單組測試數據。
兩個整數n,m(2<=n,m<=100000)
Output
一個整數表示答案。
Input示例
4 5
Output示例
10
<pre name="code" class="cpp">#include<cstdio>
#include<cstring>
const long long mod=1000000007;
typedef long long ll;
const int N=100002;
ll inv[N];
int main()
{
    int n,m;
    inv[1]=1;
    for(int i=2;i<N;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    while(~scanf("%d%d",&n,&m)){
        if(n==1||m==1){
            printf("0\n");continue;
        }
        n=n+m-4;
        m=m-2;
        ll ans=1;
        for(int i=1;i<=m;i++){
            ans=(ans*(ll)(n-i+1))%mod;
            ans=(ans*inv[i])%mod;
        }
        printf("%lld\n",ans);
    }
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章