题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5673

分析:

  这道题是一道裸的默慈金数,比较容易想到的是用卡特兰数来做。不了解的可以先学习一下。

  卡特兰数:http://www.cnblogs.com/yaoyueduzhen/p/5456490.html

  默慈金数:http://www.cnblogs.com/yaoyueduzhen/p/5456530.html

  记路径长度为nn,那么机器人最多向右走⌊​n/2​​⌋步并向左走⌊​n/2​​⌋步。

      Ans(n)=∑C​(n,​2i)​​ Catalan(i)

  其中 C(n,2i) 表示从n个物品中取2*i个的组合数,Catalan(n)表示第n个卡特兰数,0 <= i <= ⌊​n/2​​⌋

  基于n的取值范围,此题可以预处理出1,000,001以内的乘法逆元、卡特兰数。

  每次询问,都可以递推组合数,或者提前一次性预处理好阶乘和阶乘的逆元得到组合数;累加组合数与相应卡特兰数的乘积,得到答案。

  事实上,Ans(n)是第n个默慈金数,利用递推公式可以快速求出。

卡特兰数代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring> using namespace std;
const long long mod=;
long long n;
long long ans[],ni[]; long long power(long long a,long long n,long long m)
{
long long ans=,tmp=a;
while(n)
{
if(n&)
ans=ans*tmp%m;
tmp=tmp*tmp%m;
n=n>>;
}
return ans%m;
} void init()
{
ans[]=;
ans[]=;
for(long long i=;i<=;i++)
ni[i]=power(i,mod-,mod)%mod;
for(long long i=;i<=;i++)
ans[i]=(*i-)%mod*ans[i-]%mod*ni[i+]%mod;
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
long long res=,tmp=;
for(long long i=;i*<=n;i++)
{
res=(res+tmp*ans[i]%mod)%mod;
tmp=tmp*(n-*i)%mod*(n-*i-)%mod*ni[*i+]%mod*ni[*i+]%mod;
}
cout<<res<<endl;
}
return ;
}

默慈金数代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring> using namespace std; const long long mod=;
long long n;
long long ans[];
long long power(long long a,long long n,long long m)
{
long long ans=,tmp=a;
while(n)
{
if(n&)
ans=ans*tmp%m;
tmp=tmp*tmp%m;
n=n>>;
}
return ans;
} int main()
{
ans[]=;
ans[]=;
for(long long i=;i<=;i++)
ans[i+]=((*i+)%mod*ans[i]%mod+*i*ans[i-]%mod)%mod*power(i+,mod-,mod)%mod;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
cout<<ans[n]<<endl;
}
return ;
}

  

hdu5673 Robot 卡特兰数 / 默慈金数的更多相关文章

  1. 51nod1556 计算(默慈金数)

    Problem 有一个\(1*n\)的矩阵,固定第一个数为\(1\),其他填正整数, 且相邻数的差不能超过\(1\),求方案数. \(n\le 10^6\) Solution 容易发现答案是\(f_n ...

  2. HDU5673 Robot 默慈金数

    分析: 注:然后学了一发线性筛逆元的姿势 链接:http://blog.miskcoo.com/2014/09/linear-find-all-invert #include<iostream& ...

  3. 51 Nod 1556计算(默慈金数的应用)

    #include<bits/stdc++.h> #define mod 1000000007 using namespace std; typedef long long ll; ll m ...

  4. hdu-5673 Robot(默次金数)

    题目链接: Robot Time Limit: 12000/6000 MS (Java/Others)  Memory Limit: 65536/65536 K (Java/Others) 问题描述 ...

  5. hdu5673 Robot 卡特兰数+组合数学+线性筛逆元

    Robot Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  6. Python 素数判断;以及默尼森数

    1. 素数/质数 只能被2或者本身整除的正整数. 2. 默尼森数 P是素数且M也是素数,并且满足等式M=2^P-1,则称M为默尼森数. 编程小要求: 输出前5个默尼森数 1)最外层循环找素数 中间层循 ...

  7. Python实现的寻找前5个默尼森数算法示例

    Python实现的寻找前5个默尼森数算法示例 本文实例讲述了Python实现的寻找前5个默尼森数算法.分享给大家供大家参考,具体如下: 找前5个默尼森数. 若P是素数且M也是素数,并且满足等式M=2* ...

  8. Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景

    在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...

  9. 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)

    不过必须XP SP3以上才行.所有API大全: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).a ...

随机推荐

  1. 【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点

    来源: http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.html 接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些 ...

  2. new DefaultHttpClient过时处理建议和HTTP调用后关闭流处理

    因为工作中经常会写点接口类需求,写完HTTP的接口后,就要写测试类来调下服务端的代码.最近写新的测试调用代码时候,发现项目中new DefaultHttpClient()实例过期很久了,于是查阅了些资 ...

  3. 九度OJ1000

    题目描述: 求整数a,b的和. 输入: 测试案例有多行,每行为a,b的值. 输出: 输出多行,对应a+b的结果. 样例输入: 1 2 4 5 6 9 样例输出: 3 9 15 代码实现: #inclu ...

  4. 6.RDD持久性

    RDD持久性 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分布式数据集 6 ...

  5. Redis数据类型之ZSet(五)

    前言:有序集合zset跟其他类型一样,同样有几种编码方式.主要有两种编码方式,REDIS_ENCODING_ZIPLIST和REDIS_ENCODING_SKIPLIST.ziplist可以表示较小的 ...

  6. MySQL buffer pool中的三种链

    三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.d ...

  7. iOS多款源码分享

    iOS精选源码 列表联动,Linkage 电商商品详情 AxcUIKit-控件整合框架,快速简单的使用高级控件 GKNavigationBarViewController-导航栏联动 仿京东的加入购物 ...

  8. seajs的模块化开发--实践笔记

    2017-04-02 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.有效的解决复杂项目中命名冲突.依赖.性能等问题. SeaJS ...

  9. python 密码学编程 -- 2

    接上一篇随笔 ******************************************************************** * quote : "http://i ...

  10. NYOJ--139--我排第几个(康托展开)

    我排第几个 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一 ...