HDU 4828 (卡特兰数)
来源:互联网 发布:淘宝轮播图片750 尺寸 编辑:程序博客网 时间:2024/05/16 00:54
Grids
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 708 Accepted Submission(s): 291
Problem Description
度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件?
Input
第一行为数据组数T(1<=T<=100000)。
然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。
然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。
Output
对于每组数据,输出符合题意的方案数。由于数字可能非常大,你只需要把最后的结果对1000000007取模即可。
Sample Input
213
Sample Output
Case #1:1Case #2:5Hint对于第二组样例,共5种方案,具体方案为:
显然数字从大到小只能放在第一行的第一个空格或者第二行的第一个空格,然后放到第一
行看做入栈放到第二行看做出栈答案就是卡特兰数。递推一遍逆元和答案就好了。
卡特兰数f(n)=f(n-1)*(4n-2)/(n+1)。
#include <cstdio>#include <cmath>#include <algorithm>#include <iostream>#include <cstring>#include <vector>using namespace std;#define mod 1000000007#define maxn 1111111long long n;long long f[maxn];//逆元long long ans[maxn];void init () {f[1] = 1; for (int i = 2; i <= 1000000; i++){ f[i] = (long long)(mod - mod/i) * f[mod % i] % mod; } ans[1] = 1; for (int i = 2; i <= 1000000; i++) { ans[i] = ans[i-1] * (4*i-2) % mod * f[i+1] % mod; }}int main () {init ();int t, kase = 0;scanf ("%d", &t);while (t--) {scanf ("%lld", &n);printf ("Case #%d:\n%lld\n", ++kase, ans[n]);}return 0;}
0 0
- HDU 4828 (卡特兰数)
- HDU 4828 (卡特兰数+逆元)
- Hdu 4828 Grids【卡特兰数】
- HDU 4828 Grids(卡特兰数)
- HDU 1023 卡特兰数
- HDU 3723卡特兰数
- HDU 1133 卡特兰数
- hdu 3723 卡特兰数
- hdu 5184 卡特兰数
- hdu 1023 卡特兰数
- hdu 1023 卡特兰数
- 卡特兰数 hdu 5673
- 卡特兰数 Catalan数 hdu 1023
- hdu 1130 卡特兰数加大数
- hdu 4828 Grids(拓展欧几里得+卡特兰数)
- HDU 4828 Grids(卡特兰数+乘法逆元)
- hdu 1023,catalan,卡特兰数
- hdu 1134 卡特兰数+大数
- TOMCAT的目录结构 1++ Tomact的一些小配置2++Java Web开发: Tomcat中部署项目的三种方法
- 第十三周项目一 阅读程序请写出这些程序的运行结果(1 虚函数)
- 自定义 Windows RE 体验
- BSG白山极客挑战赛
- ubuntu终端su认证失败:允许su到root的方法
- HDU 4828 (卡特兰数)
- 拜访
- UIWindow
- 几种常用的本地化存储方式
- WTL 调试输出的问题
- elasticsearch 创建type及插入数据
- 我读《精进》——05 修炼思维
- MySQL高可用架构在业务层面的分析研究
- dos