卡特兰数
我们称一个长度为 2n 的数列是有趣的,当且仅当该数列满足以下三个条件:
- 它是从 1 到 2n 共 2n 个整数的一个排列 {ai};
- 所有的奇数项满足 a1<a3<⋯<a2n−1 ,所有的偶数项满足 a2<a4<⋯<a2n;
- 任意相邻的两项 a2i−1 与 a2i (1≤i≤n) 满足奇数项小于偶数项,即:a2i−1<a2i。
任务是:对于给定的 n,请求出有多少个不同的长度为 2n 的有趣的数列。
因为最后的答案可能很大,所以只要求输出答案 modP 的值。
1|0输入格式
只包含用空格隔开的两个整数 n 和 P。
2|0输出格式
仅含一个整数,表示不同的长度为 2n 的有趣的数列个数 modP 的值。
3|0数据范围
1≤n≤106,2≤P≤109
4|0输入样例:
5|0输出样例:
6|0样例解释
对应的 5 个有趣的数列分别为 {1,2,3,4,5,6},{1,2,3,5,4,6},{1,3,2,4,5,6},{1,3,2,5,4,6},{1,4,2,5,3,6}。
难度:中等 |
---|
时/空限制:1s / 64MB |
总通过数:1138 |
总尝试数:1814 |
来源:《信息学奥赛一本通》,HNOI2009 |
算法标签 |
核心思路:看到组合数学无非就那么些方法,隔板法,还有就是卡特兰数。但是我们很难发现哪些是需要用到卡特兰数的。所以我们必须对它的性质进一步推导
卡特兰数的定义:以走网格为例,从格点(0,0)走到(n,n),只能向右和向上走,并且不可以越过y=x这条直线的条数,这就是卡特兰数记为
也就是这个题目:[01序列](找不到页面 - AcWing)
通项公式:(1)
通俗点讲就是一种操作数不可以超过另外一种,或者两种操作数不可以有交集,这些操作就是合法的方案数,也就是卡特兰数
接下来知道这个背景后我们该怎么做题呢,我们随意构造一项会发现
我们先把前
比如:1 3 2 4 _ 5
此时奇数项cnt(1,2,5)=3>偶数项cnt(2,4).就会出现中间那个数无法构造了。注意我们这里的奇数项和偶数项是指每一项的下标,而不是下标对应的数。其实我们也可以把这个奇数和偶数出现的次序看成01序列的操作。
这个是题目背景:董晓算法
__EOF__

本文链接:https://www.cnblogs.com/xyh-hnust666/p/16927428.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具