CSU 1320:Scoop water(卡特兰数)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1320
题意:……是舀的时候里面必须要有1L,而不是舀完必须要有1L。
思路:才知道是卡特兰数。
这个感觉写的很好 http://www.cnblogs.com/wuyuegb2312/p/3016878.html
卡特兰数可以解决:求括号匹配,出栈入栈等组合个数的问题。
卡特兰数公式:
first O(n): h(n) = h(n-1) * (4*n-2) / (n+1)
second O(n^2): h(n) = h(0)*h(n-1) + h(1)*h(n-2) …… + h(n-1)*h(0)
third 直接算的公式:h(2n) = C(n, 2n) / (n+1)
第一种计算要用到逆元
逆元: 费马小定理
a^(m-1) ≡ 1(mod m)
a * a^(m-2) ≡ 1(mod m)
a^(m-2) ≡ (1/a)(mod m)
#include <cstdio>
using namespace std;
typedef long long LL;
#define N 10010
#define MOD 1000000007
LL f[N];
/*
卡特兰数公式:
first O(n): h(n) = h(n-1) * (4*n-2) / (n+1)
second O(n^2): h(n) = h(0)*h(n-1) + h(1)*h(n-2) …… + h(n-1)*h(0)
逆元: 费马小定理
a^(m-1) ≡ 1(mod m)
a * a^(m-2) ≡ 1(mod m)
a^(m-2) ≡ (1/a)(mod m)
*/
LL q_pow(LL a, LL b) {
LL ans = ;
a %= MOD; b %= MOD;
while(b) {
if(b & ) ans = (ans * a) % MOD;
b >>= ;
a = (a * a) % MOD;
}
return ans;
}
// 快速乘(貌似鸡肋)
LL q_mul(LL a, LL b) {
LL ans = ;
a %= MOD;
while(b) {
if(b & ) {ans = (ans + a) % MOD; b--;}
b >>= ;
a = (a + a) % MOD;
}
return ans % MOD;
} void dabiao() {
f[] = f[] = 1LL;
for(int i = ; i <= ; i++) // first
f[i] = f[i-] * ( * i - ) % MOD * q_pow(i + , MOD - ) % MOD;
// for(int i = 2; i <= 10000; i++) second
// for(int j = 0; j < i; j++)
// f[i] = (f[i] + f[i-j-1] * f[j] % MOD) % MOD;
} int main() {
int n; dabiao();
while(~scanf("%d", &n)) printf("%lld\n", f[n] % MOD);
return ;
}
CSU 1320:Scoop water(卡特兰数)的更多相关文章
- Contest2037 - CSU Monthly 2013 Oct (problem B :Scoop water)
http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=1 [题解]:卡特兰数取模 h(n) = h(n-1)*(4*n-2)/( ...
- csu 10月 月赛 B 题 Scoop water
一个卡特兰数的应用: 卡特兰数主要有以下几个用途: 1.不同的出栈入栈数: 2.n个点组成的不同的二叉树的数目: 3.凸多边形的三角剖分划分: 4.括号化问题: 通项公式是:h(n) = C(2n-2 ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
- 卡特兰数(Catalan)
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...
- NOIP2003pj栈[卡特兰数]
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
- 卡特兰数 (Catalan)
卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1. 或 2. 递归公式: 1. 或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k- ...
- HDU 5673 Robot ——(卡特兰数)
先推荐一个关于卡特兰数的博客:http://blog.csdn.net/hackbuteer1/article/details/7450250. 卡特兰数一个应用就是,卡特兰数的第n项表示,现在进栈和 ...
- HDU 1023 Traning Problem (2) 高精度卡特兰数
Train Problem II Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Sub ...
- HDU1130 卡特兰数
How Many Trees? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
随机推荐
- Java之"Mozilla Rhino"引擎(二)
在Java中使用Rhino, 能让你使用类似Groovy, ECMAScript...等等之类的不同动态脚本语言, 其中值得推荐的是ECMAScript, 它是Rhino的默认实现, 同时也在JDK1 ...
- typescript调用javascript && URI.js
URI.js URI.js是一个用于处理URL的JavaScript库它提供了一个“jQuery风格”的API(Fluent接口,方法链接)来读写所有常规组件和许多便利方法,如.directory() ...
- 在云中生成和模拟 iOS
原文:在云中生成和模拟 iOS 1.原文地址 https://msdn.microsoft.com/zh-cn/library/vs/alm/dn858446.aspx
- 图像滤镜艺术---Glow Filter发光滤镜
原文:图像滤镜艺术---Glow Filter发光滤镜 Glow Filter发光滤镜 Glow Filter发光滤镜是一种让图像产生发光效果的滤镜,它的实现算法如下: 1,对原图P进行高斯模糊得到图 ...
- centos 6.5 搭建ftp 服务器(vsftpd的配置文件说明)
0x00 如何快速的搭建简易的资源发布站 开启简易的python http服务器 1 2 cd /home/your_path python -m SimpleHTTPServer 8000 开启防火 ...
- Win10《芒果TV》发布两周年纪念特别献礼,陪你度国庆,好礼送不停
2015年芒果TV和微软中国联姻,在Windows10发布之际,共同宣告了Win10版<芒果TV>的诞生,第一个版本于2015年9月30日登陆Windows商店,历经28次迭代,现在她两岁 ...
- SqlServer 更改复制代理配置文件参数及两种冲突策略设置
原文:SqlServer 更改复制代理配置文件参数及两种冲突策略设置 由于经常需要同步测试并更改代理配置文件属性,所以总结成脚本,方便测试. 可更新订阅的冲突策略有两种情况:一是在发布中冲突,即订阅数 ...
- Android零基础入门第26节:layout_gravity和gravity大不同
原文:Android零基础入门第26节:layout_gravity和gravity大不同 上一期我们一起学习了LinearLayout线性布局的方向.填充模型和权重,本期来一起学习LinearLay ...
- return view 详解 MVC
1.return View(); 返回值 类型:System.Web.Mvc.ViewResult将视图呈现给响应的 View() 结果. 注释 View() 类的此方法重载将返回一个具有空 View ...
- client,offset,scroll系列
client(客户端),offset(偏移),scroll(滚动)1.client系列 clientTop 内容区域到边框顶部的距离 ,说白了,就是边框的高度 clientLeft 内容区域到边框左部 ...