HDU 5673 Robot【卡特兰数】
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5673
题意:
有一个机器人位于坐标原点上。每秒钟机器人都可以向右移到一个单位距离,或者在原地不动。如果机器人的当前位置在原点右侧,它同样可以向左移动单位距离。一系列的移动(左移,右移,原地不动)定义为一个路径。问有多少种不同的路径,使得n秒后机器人仍然位于坐标原点?答案可能很大,只需输出答案对1,000,000,007取模。
分析:
最终回到原点说明向左和向右走的步数相同,假设一共走了i步,那么左右各走了i/2步,剩下n−i步则原地等待。
因为只有在原点右边的时候才能向左走,也就是说在走的过程中右边的步数必须大于等于左边的步数,这样我们只需要对于不同的i(i<=n/2)求出其卡特兰数即可。
代码:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll ;
const int maxn = 1000000 + 5, mod = 1e9 + 7;
ll f[maxn], rf[maxn], inv[maxn];
inline ll C(int n, int m)
{
if(m < 0||n < m)return 0;
return f[n] * rf[m] % mod * rf[n - m] % mod;
}
void init()
{
f[0] = f[1] = rf[0] = rf[1] = inv[0] = inv[1] = 1;
for(int i = 2; i < maxn; i++){
f[i] = f[i - 1] * i % mod;
inv[i] = inv[mod % i] *(mod - mod / i) % mod;
rf[i] = rf[i - 1] * inv[i] % mod;
}
}
int main (void)
{
int T;scanf("%d", &T);
init();
while(T--){
int n;
scanf("%d", &n);
ll ans = 0;
for(int i = 0; i <= n / 2; i++){
ans += (C(2 * i, i) - C(2 * i, i - 1) + mod )* C(n, 2 * i) % mod;
ans %= mod;
}
printf("%I64d\n", ans % mod);
}
return 0;
}
HDU 5673 Robot【卡特兰数】的更多相关文章
- hdu 5673 Robot 卡特兰数+逆元
Robot Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- HDU 5673 Robot ——(卡特兰数)
先推荐一个关于卡特兰数的博客:http://blog.csdn.net/hackbuteer1/article/details/7450250. 卡特兰数一个应用就是,卡特兰数的第n项表示,现在进栈和 ...
- hdu5673 Robot 卡特兰数+组合数学+线性筛逆元
Robot Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- hdu5673 Robot 卡特兰数 / 默慈金数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5673 分析: 这道题是一道裸的默慈金数,比较容易想到的是用卡特兰数来做.不了解的可以先学习一下. 卡特 ...
- hdu 4828 Grids 卡特兰数+逆元
Grids Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Problem D ...
- hdu 5184 类卡特兰数+逆元
BC # 32 1003 题意:定义了括号的合法排列方式,给出一个排列的前一段,问能组成多少种合法的排列. 这道题和鹏神研究卡特兰数的推导和在这题中的结论式的推导: 首先就是如何理解从题意演变到卡特兰 ...
- hdu 5184(数学-卡特兰数)
Brackets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HDU 5673 Robot 数学
Robot 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5673 Description There is a robot on the origi ...
- hdu 4828 Grids(拓展欧几里得+卡特兰数)
题目链接:hdu 4828 Grids 题目大意:略. 解题思路:将上一行看成是入栈,下一行看成是出栈,那么执着的方案就是卡特兰数,用递推的方式求解. #include <cstdio> ...
随机推荐
- js 高亮显示关键字
示例: var defaultEmphasisHandler = function(keyword, data){ var regex = RegExp("("+keyword.r ...
- 【python之路35】FTP文件断电续传作业
开发一个支持多用户在线FTP程序: 要求: 1.用户MD5加密认证 2.允许同时多用户登陆(socketserver) 3.执行命令 4.上传文件 文件传输过程中显示进度条 支持文件的断点续传
- Django运行错误常见问题及解决方法1
如果不是在JetBrains PyCharm 2017.2里创建的想在JetBrains PyCharm 2017.2里运行.可以在 编辑结构 进行配置正常使用
- bzoj 1029 [JSOI2007]建筑抢修——贪心(伪dp)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1029 当然要按结束时间排序,然后按顺序修或跳过.就是那种“……不会使答案不优”的证明. 想了 ...
- TZ_10_spring-sucrity 服务器和页面的权限控制
1.在服务器端我们可以通过Spring security提供的注解对方法来进行权限控制. Spring Security在方法的权限控制上支持三种类型的注解,JSR-250注解.@Secured注解和 ...
- animation-fill-mode 之 forwards , transition-timing-function的取值 和 transform属性
animation-fill-mode 有四个值可选,并且允许由逗号分隔多个值. none 不改变默认行为. forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义). backw ...
- (转载) poj1236 - Network of Schools
看到一篇挺好的代码,适合初学者,转载自 博主 wangjian8006 原地址:http://blog.csdn.net/wangjian8006/article/details/7888558 题目 ...
- QT_获取运行进程所在目录路径_1
QString getProcessPathForWin(int idProcess) { #ifdef Q_OS_WIN // access process path WCHAR name[]; Z ...
- web前端学习(四)JavaScript学习笔记部分(5)-- 事件流详解
1.JS事件详解-事件流 1.1.事件流 1.事件流: 描述的是在页面中接受事件的顺序 2.事件冒泡: 由最具体的元素接收,然后逐级上传播至最不具体的节点(文档) 3.事件捕获: 最不具体的节点先接收 ...
- Codeforces 375A
这是一道数学题,真是很考验数学思维,之前也遇到过相似的问题,但是依然是想不到点子上,就这提而言,最重要的就是 能否发现由 1, 6, 8,9这四个数字组成的排列对7取模是可以得到0, 1, 2, 3, ...