HDU 4828 (卡特兰数+逆)
2015-07-01 12:29
344 查看
HDU 4828 Grids
思路:能够转化为卡特兰数,先把前n个人标为0。后n个人标为1。然后去全排列,全排列的数列。假设每一个1的前面相应的0大于等于1,那么就是满足的序列,假设把0看成入栈,1看成出栈。那么就等价于n个元素入栈出栈,求符合条件的出栈序列,这个就是卡特兰数了。然后去递推一下解,过程中须要求逆元去计算
代码:
#include <stdio.h> #include <string.h> const int N = 1000005; const long long MOD = 1000000007; long long extend_gcd(long long a,long long b,long long &x,long long &y) { if(a == 0 && b == 0) return -1; if(b == 0){x = 1; y = 0; return a;} long long d = extend_gcd(b, a % b, y, x); y -= a / b * x; return d; } long long mod_reverse(long long a, long long n) { long long x,y; long long d = extend_gcd(a, n, x, y); if(d == 1) return (x % n + n) % n; else return -1; } int t, n; long long Catalan ; int main() { Catalan[1] = Catalan[2] = 1; for (int i = 3; i < N; i++) { long long tmp = mod_reverse((long long) i, MOD); Catalan[i] = Catalan[i - 1] * (4 * i - 6) % MOD * tmp % MOD; } int cas = 0; scanf("%d", &t); while (t--) { scanf("%d", &n); printf("Case #%d:\n", ++cas); printf("%lld\n", Catalan[n + 1]); } return 0; }
相关文章推荐
- linux集群时间同步
- poj 1021 2D-Nim 模拟
- Java Jersey2使用总结
- sed 删除换行符
- 花生壳如何实现远程监控
- Java:Math类中的常用方法
- 让RelativeLayout,LinearLayout整个布局实现响应点击事件
- [leetcode][math] Sqrt(x)
- 5.数据库管理(1)
- Java:String类的常用方法
- 分享 ASP.Net 网站设置 404错误跳转到指定页面的三种方法
- 多线程编程
- 算法导论(CLRS)答案
- 实战FFmpeg编译支持arm64(转)
- 更改Linux用户的登录shell环境
- DOM元素尺寸offsetWidth,scrollWidth,clientWidth等详解
- struts2学习笔记
- Android学习 18 ->网格控件GridView
- JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
- 【Java 学习笔记】 HashMultimap(guava)