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(卡特兰数)的更多相关文章

  1. 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)/( ...

  2. csu 10月 月赛 B 题 Scoop water

    一个卡特兰数的应用: 卡特兰数主要有以下几个用途: 1.不同的出栈入栈数: 2.n个点组成的不同的二叉树的数目: 3.凸多边形的三角剖分划分: 4.括号化问题: 通项公式是:h(n) = C(2n-2 ...

  3. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

  4. 卡特兰数(Catalan)

    卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...

  5. NOIP2003pj栈[卡特兰数]

    题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...

  6. 卡特兰数 (Catalan)

    卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1.         或       2.   递归公式: 1.  或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k- ...

  7. HDU 5673 Robot ——(卡特兰数)

    先推荐一个关于卡特兰数的博客:http://blog.csdn.net/hackbuteer1/article/details/7450250. 卡特兰数一个应用就是,卡特兰数的第n项表示,现在进栈和 ...

  8. HDU 1023 Traning Problem (2) 高精度卡特兰数

    Train Problem II Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Sub ...

  9. HDU1130 卡特兰数

    How Many Trees? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

随机推荐

  1. WPF 属性变更通知类的实现

    原文:WPF 属性变更通知类的实现 平时用依赖属性多一些,普通属性的变更通知知道有这个方法,但是老是忘记名字,再写一遍吧. public class Student : INotifyProperty ...

  2. System.Windows.Documents.Run

    希望采用不同的方案来书写文字,可以使用多个TextBlock,也可以使用一个TextBlock+多个Run <TextBlock FontSize="12" Margin=& ...

  3. XF 表视图添加和删除行

    using System;using Xamarin.Forms;using Xamarin.Forms.Xaml; [assembly: XamlCompilation (XamlCompilati ...

  4. Win10《芒果TV》更新v3.8.40青春版:优化推送策略、新增缓存清理

    芒果TV暑期重磅活动-青春芒果节拉开帷幕,炫酷的3D视觉大秀.王牌IP互动体验馆.众星云集的青春炙燥夜晚会.神秘的芒果吉祥物发布,Win10版<芒果TV>全平台同步更新青春版v3.8.40 ...

  5. .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现

    原文:.NET环境下有关打印页面设置.打印机设置.打印预览对话框的实现 我个人认为,开发MIS,首先就得解决网格的问题,而开发工具为我们提供了如DataGrid.MSHFlexGrid的控件.其次,是 ...

  6. 给 Web 开发人员推荐的通用独立 UI 组件(二)

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...

  7. 解决com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer;

    我在开发Windows Azure的Mobile Service(隔天补上创建过程)的安卓客户端时,报出了com.android.dex.DexException: Multiple dex file ...

  8. GNU自动化工具使用全过程详解,以及在线手册

    [root@localhost test3]# cat add.h#ifndef _ADD_H_#define _ADD_H_ extern int add(int, int); #endif [ro ...

  9. 从IntToHex()说起,栈/堆地址标准写法 good

    学习中的一些牢骚.栈/堆地址标准写法. 2017-02-12 • 杂谈 • 暂无评论 • 老衲 •浏览 226 次 我一直都在寻找各种业务功能的最简单写法,用减法的模式来开发软件.下面是我的写法,如果 ...

  10. 记一次排查tomcat耗费CPU过高的经历

    有一个新项目,在测试环境部署后,发现tomcat进程耗费的CPU非常高,排查过程如下: 日志搜集 先通过top,查找耗费CPU最高的线程 top -Hp pid 将线程ID转为16进制 printf ...