【BZOJ2886】最短路【组合数】
2016-04-02 09:57
344 查看
【题目链接】
同【BZOJ3260的题解】
/* Pigonometry */
#include <cstdio>
#include <algorithm>
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
const ULL p = 1000000007;
void exgcd(ULL a, ULL b, LL &x, LL &y) {
b ? (exgcd(b, a % b, y, x), y -= a / b * x) : (x = 1, y = 0);
}
ULL inv(ULL a) {
LL x, y;
exgcd(a, p, x, y);
if(x < 0) x += p;
return x % p;
}
int main() {
ULL n, m; scanf("%llu%llu", &n, &m);
if(m > n) swap(n, m); n += m + 1; n %= p;
ULL a = 1, b = 1;
for(int i = 1; i <= m; i++) {
a = (n - i + 1) * a % p;
b = i * b % p;
}
ULL ans = (a * inv(b) % p + n - m - 1) % p;
printf("%llu\n", ans);
return 0;
}
同【BZOJ3260的题解】
/* Pigonometry */
#include <cstdio>
#include <algorithm>
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
const ULL p = 1000000007;
void exgcd(ULL a, ULL b, LL &x, LL &y) {
b ? (exgcd(b, a % b, y, x), y -= a / b * x) : (x = 1, y = 0);
}
ULL inv(ULL a) {
LL x, y;
exgcd(a, p, x, y);
if(x < 0) x += p;
return x % p;
}
int main() {
ULL n, m; scanf("%llu%llu", &n, &m);
if(m > n) swap(n, m); n += m + 1; n %= p;
ULL a = 1, b = 1;
for(int i = 1; i <= m; i++) {
a = (n - i + 1) * a % p;
b = i * b % p;
}
ULL ans = (a * inv(b) % p + n - m - 1) % p;
printf("%llu\n", ans);
return 0;
}
相关文章推荐
- POJ3669-Meteor Shower
- C++卷积神经网络实例:tiny_cnn代码详解(12)——从CNN中看多态性
- android—AOSP、AOKP、CM的区别
- 拉格朗日乘数
- 关于Linux 下kill 与 pause的一些小思考
- Ugly Number
- 【java】向上转型和向下转型
- (OK) install—batman-adv—batctl—CentOS7
- Xcode Build Search Paths 设置
- KMP算法
- SSL_1532 矩阵乘法
- RecyleView使用详解
- (OK) 运行cBPM—CentOS7
- FireMonkey的TreeView控件的一个bug
- LNMP环境搭建之一nginx安装
- 装修需要制订主观总预算
- 一起啃PRML - 1.2 Probability Theory 概率论
- 【笔试/面试】排列组合与概率计算(三)
- (OK) C/S—心跳检测—heartbeat
- 双边滤波与导向滤波&何恺明去雾算法