51nod 1119 机器人走方格

来源:互联网 发布:python中定义矩阵 编辑:程序博客网 时间:2024/05/16 12:38

1119 机器人走方格 V2
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。
Input
第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000000)
Output
输出走法的数量 Mod 10^9 + 7。
Input示例
2 3
Output示例
3

画个图 就会发现这是个杨辉三角的矩阵,然后推理一下矩阵的规律
推出是组合数
因为组合数的大小太大,所以需要乘法逆元,
乘法逆元就是把除法变成乘法,不影响其去余的值

#include <iostream>#include <stdio.h>#include <iomanip>#include <cmath>#include <cstring>#include <string>#include <algorithm>using namespace std;long long mod=1000000007;int exgcd(long long a,long long b,long long &x,long long &y){    if(b==0)    {        x=1;        y=0;        return a;    }    int r=exgcd(b,a%b,x,y);    int t=x; x=y; y=t-(a/b)*y;    return r;}int main(){    long long a,b;    while(cin>>a>>b)    {        if(b>a) swap(a,b);        long long m,n;        n=a+b-2;        m=a-1;        long long x=1,y=1;        int i;        for(i=n;i>n-m;i--)        {            x=x*i%mod;        }        for(i=1;i<=m;i++)        {            y=y*i%mod;        }        long long d1,d2;        exgcd(y,mod,d1,d2);        while(d1<0)        {            d1+=mod;        }        cout<<d1*x%mod<<endl;    }}
0 0
原创粉丝点击