51nod 1118 机器人走方格 (排列组合+乘法逆元!!!)

原创 2015年10月25日 11:12:32


M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。
Input
第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000)
Output
输出走法的数量。
Input示例
2 3
Output示例
3

以前一直在用逆元,没想到今天用模板卡了,还是对概念了解的不够。今天在kuangbin神的指导下,稍稍懂了一点。

逆元:

定义 对a∈Zm,存在b∈Zm,使得a+b ≡ 0 (mod m),则b是a的加法逆元,记b= - a。
定义 对a∈Zm,存在b∈Zm,使得a×b ≡1 (mod m),则称b为a的乘法逆元
我们通常所指的是乘法逆元。

然而乘法逆元的应用也需要条件:

对于乘法逆元:在mod m的操作下(即Zm中),a存在乘法逆元当且仅当a与m互质不定方程ab+mx=1的任意一组整数解(b,x),b就是a的乘法逆元。具体计算可以使用扩展欧几里德算法(Extended-GCD)。

kuangbin神给的模板



//返回d=gcd(a,b);和对应于等式ax+by=d中的x,y
long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
    if(a==0&&b==0) return -1;//无最大公约数
    if(b==0){x=1;y=0;return a;}
    long long d=extend_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
//*********求逆元素*******************
//ax = 1(mod n)
long long mod_reverse(long long a,long long n)
{
    long long x,y;
    long long d=extend_gcd(a,n,x,y);
    if(d==1) return (x%n+n)%n;
    else return -1;
}


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
//返回d=gcd(a,b);和对应于等式ax+by=d中的x,y
ll extend_gcd(ll a,ll b,ll &x,ll &y)
{
    if(a==0&&b==0) return -1;//无最大公约数
    if(b==0){x=1;y=0;return a;}
    ll d=extend_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
//*********求逆元素*******************
//ax = 1(mod n)
ll mod_reverse(ll a,ll n)
{
    ll x,y;
    ll d=extend_gcd(a,n,x,y);
    if(d==1) return (x%n+n)%n;
    else return -1;
}

ll c(ll m,ll n)
{
	ll i,j,t1,t2,ans;
	t1=t2=1;
	for(i=n;i>=n-m+1;i--) t1=t1*i%mod;
	for(i=1;i<=m;i++) t2=t2*i%mod;
	return  t1*mod_reverse(t2,mod)%mod;
}

int main()
{
	ll n,m,ans;
	cin>>m>>n;
	ans=c(min(m-1,n-1),m+n-2);
	cout<<ans<<endl;
	return 0;
} 


取模情况下,逆元后就把它当做乘法。。。取模规则不变就行。。。此处wa了N发




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

51Nod-1118-机器人走方格

M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。 Input 第1行,2个数M,N,中间用空格隔开...
  • f_zyj
  • f_zyj
  • 2016年04月28日 14:47
  • 739

51nod 1118 机器人走方格(简单DP)

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很...

51nod_1118 机器人走方格(组合数+逆元)

1118 机器人走方格 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只...
  • lwlldd
  • lwlldd
  • 2017年04月26日 15:09
  • 202

求逆元-51nod1118机器人走方格

思路: 高中数学题,向下三步,向右两步 C (2 , 3 +2 ) 总共五步,选择哪两步往右走。 通过学长的讲解明白了如何把这个阶乘级别的式子缩小: y/x %mod =x*(y^(mod-2))%m...

51nod:1118 机器人走方格(排列组合+逆元)

1118 机器人走方格 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 M * N的方格,一个机器人从...
  • zugofn
  • zugofn
  • 2017年05月24日 20:56
  • 201

51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果,   时间复杂度O(m*n)。运算量1000*1000 = 1000000,很明显不会超时。递...

51nod-1118 机器人走方格

本文为博主原创文章,如有雷同纯属抄袭。 1118 机器人走方格  收藏  关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少...

51nod---1118 机器人走方格

题目描述基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能...

51nod-1119 机器人走方格(组合数学,离散数学)

51nod 1119 机器人走方格V2 除法取模 费马小定理 组合数学

51nod1119 机器人走方格 组合数学

M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。 题目本身很简单,就是一个初中都推倒过的理论,只能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51nod 1118 机器人走方格 (排列组合+乘法逆元!!!)
举报原因:
原因补充:

(最多只允许输入30个字)