基准时间限制: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

C(n - 1 + m - 1, n - 1)

#include<iostream>
#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, t_1, t_2;
t_1 = t_2 = 1;
for (i = n; i >= n - m + 1; i--)
{
t_1 = t_1 * i % mod;
}
for (i = 1; i <= m; i++)
{
t_2 = t_2 * i % mod;
}
return t_1 * mod_reverse(t_2, 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;
}

最新文章

  1. 【JavaScript】操作Canvas画图
  2. db2 常用命令
  3. AC日记——删除单词后缀 openjudge 1.7 20
  4. 创建Fragment
  5. 【Mongodb】---基本命令
  6. Codeforces Round #Pi (Div. 2) ABCDEF已更新
  7. npoi导入--从varchar数据类型到datetime数据类型转换产生一个超出范围的值问题
  8. 基于数据库的自动化生成工具,自动生成JavaBean、数据库文档、框架代码等(v5.8.8版)
  9. js 逻辑运算符优化
  10. 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
  11. zookeeper的ACL权限控制
  12. WPF依赖属性相关博客导航
  13. KMP算法的实现(Java语言描述)
  14. poj 2480 Longge&#39;s problem 欧拉函数+素数打表
  15. socket can demo
  16. Jquery的方法(一)
  17. namespace 相关
  18. 使用bison和yacc制作脚本语言(4)
  19. Python-Day07-图形用户界面和游戏开发
  20. Super超级ERP系统---(9)订单管理--订单拣货

热门文章

  1. zmq.error.ZMQError: Address already in use
  2. [React] {svg, css module, sass} support in Create React App 2.0
  3. 运行计划中cost计算方法
  4. NODE安装N管理出错
  5. Python的调用程序
  6. 鸟哥的Linux私房菜-----12、学习使用Shell scripts
  7. 图像处理之基础---boxfiter
  8. [办公应用]如何在WORD中让英文网址可以在字符中间换行
  9. C++的cout高阶格式化操作
  10. (22) java web的struts2框架的使用-struts配置文件