2017山东省第八届ACM省赛 D. HEX(组合数学)
来源:互联网 发布:deepin linux使用教程 编辑:程序博客网 时间:2024/05/18 12:34
题意:从(1,1)到(x,y)有多少种走法?每次可以向下,左下,右下走。
思路:可以算出从(1,1)到(x,y)最多走tot= x-1步,最多向左下走l = x-y步,向右下走r = tot - l步,向下走一步相当于走1步左下,1步右下。则向下走的步数最多为m = min(l,r)步。
枚举向下走的步数i,则向左下走l-i步,向右下走r - i步。那么不同的走法就是向下走,向左下和向右下走的全排列,即 (i + l - i + r - i)!/ (i! * (l - i)! *(r - i)!) % mod,除法取模相当于乘以逆元。
#include <cstdio>#include <algorithm>#include <iostream>#include<vector>#include<cmath>#include<set>#include<cstring>#include<map>using namespace std;typedef long long ll;const int maxn = 1e6 + 10;const int maxt = 100200;const int inf = 0x3f3f3f3f;const ll INF = 0x7f7f7f7f7f;const int mod = 1e9 + 7;const double pi = acos(-1.0);const double eps = 1e-8;ll fact[100010]; // 阶乘ll f[100010]; // 阶乘的逆int cal(int l, int r, int m){ //计算全排列 ll ans = fact[l + r + m] * f[l] % mod * f[r] % mod * f[m] % mod; return ans;}ll quick_mod(ll x, int n){ // 快速幂求逆元 ll ret = 1; while(n){ if(n & 1) ret = ret * x % mod; x = x * x % mod; n >>= 1; } return ret;}void init(){ fact[0] = 1; for(int i = 1; i <= 100000; ++i) fact[i] = fact[i - 1] * i % mod; f[0] = 1; f[100000] = quick_mod(fact[100000], mod - 2); for(int i = 99999; i >= 0; --i) f[i] = f[i + 1] * (i + 1) % mod;}int main(){ int x, y; init(); while(scanf("%d%d", &x, &y) == 2){ int tot = x - 1; // 总步数 int l = x - y, r = tot - l; //左下、右下的步数 int minn = min(l, r); // 向下的步数 ll ans = 0; for(int i = 0; i <= minn; ++i){ int ll = l - i, rr = r - i; ans = (ans + cal(ll, rr, i)) % mod; } printf("%lld\n", ans); } return 0;}
0 0
- 2017山东省第八届ACM省赛 D. HEX(组合数学)
- 山东省第八届acm省赛D题HEX(组合数学)
- 山东省第八届ACM省赛 D.HEX
- 山东省第八届acm省赛D题 HEX
- 山东省第八届acm省赛 HEX
- SDUT 3896 HEX 山东第八届ACM大赛D题(组合数学)
- 2017山东省-D-Hex
- 2017-山东省第八届ACM省赛
- 山东省第二届ACM省赛 Binomial Coeffcients(组合数学)
- 山东 acm D HEX 数学 求组合数
- HEX 山东省第八届省赛D题
- HEX----组合数+逆元+思维 山东省第八届省赛D题
- hatuoj 1300 HEX----组合数+逆元+思维 山东省第八届省赛D题
- 山东省第八届ACM省赛C firework
- 山东省第八届 ACM 省赛 quadratic equation
- 山东省第八届ACM省赛C题
- 山东省第八届ACM省赛A题
- 山东省第八届acm省赛 company
- JavaScript精粹---使用数字
- confirm的用法
- 欢迎使用CSDN-markdown编辑器
- vin码识别研发方法简略介绍
- 关于有偿提供拼图响应式后台的通知
- 2017山东省第八届ACM省赛 D. HEX(组合数学)
- N的阶乘
- ExpandbleListView封装Adapter
- Android Button有默认padding值的元凶!!!
- UDP编程
- 配置文件
- 分享自己觉得有意思的
- POJ NOI0105-32 求分数序列和
- Ubuntu 16.04 LTS国内快速更新源(桌面版更新源)