P2265 路边的水沟

题目背景

LYQ市有一个巨大的水沟网络,可以近似看成一个n*m的矩形网格,网格的每个格点都安装了闸门,我们将从水沟网络右下角的闸门到左上角的闸门的一条路径称为水流。

题目描述

现给定水沟网的长和宽,求该水沟网中所有只包含向左和向上移动的水流数量。

输入格式

输入共1行,包含两个整数n和m。

输出格式

输出一个数字ans,即水流的数量。由于答案可能很大,请输出答案对1000000007取模的结果。

输入输出样例

输入 #1
3 5
输出 #1
56

说明/提示

对于30%的数据,1 ≤ m,n ≤ 10。

对于50%的数据,1 ≤ m,n ≤ 1,000。

对于80%的数据,1 ≤ m,n ≤ 50,000。

对于100%的数据,1 ≤ m,n ≤ 1,000,000。

卢卡斯定理了解一下

#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
inline ll pow(ll a,ll n,ll p)
{
    ll ans=1;
    while(n)
    {
        if(n&1)
        ans=ans*a%p;
        a=a*a%p;
        n>>=1;
    }
    return ans;
} 
inline ll fm(ll a)
{
    return pow(a,mod-2,mod);
}
inline ll jc(ll x)
{
    ll ans=1;
    for(int i=2;i<=x;i++)
    {
        ans*=i;
        ans%=mod;
    }
    return ans;
}
ll c(ll a,ll b)
{
    return (((jc(b)%mod*fm(jc(a))%mod)%mod)*fm(jc(b-a))%mod);
}
int main()
{
    int n,m;
    cin>>n>>m;
    cout<<c(n,n+m);
}
 
原文地址:https://www.cnblogs.com/hrj1/p/11518055.html