第三十五章 数论——卡特兰数

news2024/11/17 6:52:47

第三十五章 数论——卡特兰数

  • 一、什么是卡特兰数
    • 1、推导
    • 2、公式
  • 二、卡特兰数的应用
    • 1、问题:
    • 2、分析
    • 3、代码

一、什么是卡特兰数

1、推导

我们看下面这个坐标系:在这里插入图片描述
我们从 ( 0 , 0 ) (0,0) (0,0)点到 ( 6 , 6 ) (6,6) (6,6)点的路线有很多,并且根据我们高中排列组合的知识,相当于从12条边中,随机选出6个向上的。所以,在不加任何限制条件的情况下,我们的路线条数为: C 12 6 C_{12}^6 C126

但是,我们现在加一个限制条件,我们只允许这个路线在红线的下面,那么现在怎么求呢?

我们可以采用正难则反的思想,用总共的条数减去不符合上述限制的条数,即是我们的结果,那么我们如何求不合法的情况呢?

在这里插入图片描述
既然越过了红线,那么必定会经过蓝色的线,由于我们的终点是 ( 6 , 6 ) (6,6) (6,6),那么此时我们将终点关于蓝色线对称,那么此时终点的对称点就是 ( 5 , 7 ) (5,7) (5,7),也就是说,我们越界的路线,关于蓝色的对称线,必定是经过 ( 5 , 7 ) (5,7) (5,7)的。也就是说,我们越界的线的条数,等价于到 ( 5 , 7 ) (5,7) (5,7)的线。

那么为什么呢?

我们反过来想,由于对称点在蓝线的上面,所以我们到达对称点的路线必定是越界的,将这些越界的线对称回来后,必定还是有的点在蓝线上,而终点对称到了 ( 6 , 6 ) (6,6) (6,6),也就是说对称回来的路线符合了到达终点并且越界的情况。所以二者等价。

那么我们这种情况的路线数目就是从12条边中,随机选5条横着的。 C 12 5 C_{12}^5 C125

所以在红线之下的路线数目就是: C 12 6 − C 12 5 C_{12}^6-C_{12}^5 C126C125

一般化的路线数目就是:
C 2 n n − C 2 n n − 1 C_{2n}^n-C_{2n}^{n-1} C2nnC2nn1

这个就是卡特兰数

2、公式

C 2 n n − C 2 n n − 1 = C 2 n n n + 1 C_{2n}^n-C_{2n}^{n-1}=\frac{C_{2n}^n}{n+1} C2nnC2nn1=n+1C2nn

二、卡特兰数的应用

1、问题:

在这里插入图片描述

2、分析

这道题我们直接用公式计算就可以了,那么问题的关键在于怎么计算组合数。组合数的计算可以用定义,因为模数是质数,所以我们求逆元的时候可以使用费马小定理。
即我们使用:
C 2 n n − C 2 n n − 1 = C 2 n n n + 1 = A 2 n n A n n ∗ ( n + 1 ) C_{2n}^n-C_{2n}^{n-1}=\frac{C_{2n}^n}{n+1}=\frac{A_{2n}^{n}}{A_{n}^{n}*(n+1)} C2nnC2nn1=n+1C2nn=Ann(n+1)A2nn

但是我们由于要取模,所以我们要对分母用逆元算。

3、代码

#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e5+10;
const int mod=1e9+7;
LL qmi(LL a,LL b,LL p)
{
    LL res=1;
    while(b)
    {
        if(b&1)
        res=a*res%p;
        a=a*a%p;
        b>>=1;
    }
    return res;
}
int main()
{
    int n;
    cin>>n;
    LL res=1;
    int a=2*n,b=n;
    for(int i=a;i>(a-b);i--)res=res*i%mod;
    for(int i=1;i<=b;i++)res=res*qmi(i,mod-2,mod)%mod;
    res=res*qmi(n+1,mod-2,mod)%mod;
    cout<<res<<endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

57.return—函数的返回值

57.return-函数的返回值 文章目录57.return-函数的返回值1.定义2.分类3. 没有返回值4.有1个返回值5.有多个返回值6.一个自定义函数只执行一次return语句7.实操练习1.定义 return关键字后接变量名或表达式可以将函数的计算结果返回到调用处。 变量或表达式等同于接收果汁、豆浆…

Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算

Chronicle Pro - 一款简单 Mac 理财规划师&#xff0c;管理你的的个人预算 使用Chronicle追踪和支付账单&#xff0c;管理你的个人预算&#xff0c;这是一款简单的Mac理财规划师。获得通知&#xff0c;这样你就不会错过下一个付款截止日期;你再也不用付滞纳金了。把你所有的账单…

8 GUI实例

GUI 1 Frame 用来创建窗口&#xff0c;构造函数如下&#xff1a; public Frame() throws HeadlessExceptionpublic Frame(String title) throws HeadlessException 常用方法如下&#xff1a; public class gui_v1 {public static void main(String[] args) {Frame f new F…

用python的turtle库画一个小猪佩奇

小猪佩奇是一个可爱的小猪。她已经四岁了&#xff0c;与她的妈妈&#xff0c;爸爸&#xff0c;和弟弟乔治生活在一起。佩奇最喜欢做的事情是玩游戏&#xff0c;打扮的漂亮&#xff0c;度假&#xff0c;以及在小泥坑里快乐的跳上跳下和与小羊苏西&#xff08;她最好的朋友&#…

Nginx小结1

Nginx 是一个高性能的HTTP和反向代理web服务器&#xff0c;作为负载均衡器&#xff0c;承接的所有请求。核心功能有负载均衡、反向代理、静态资源服务器。另外Nginx还可以使用keepalive结合使用建立主备份机实现高可用。keepalive是在TCP中一个可以检测死连接的机制&#xff0c…

WordPress插件开发教程1:开发第一个WordPress插件

第一步&#xff1a;在 wp-content \ plugins 目录新建一个目录&#xff0c;随便起个名字&#xff0c;比如&#xff1a;my-first-plugin。 第二步&#xff1a;进入 my-first-plugin 目录&#xff0c;新建一个PHP文件&#xff0c;随便起个名字&#xff0c;比如&#xff1a;hello.…

UE解决SetActorHiddenInGame后其Collision仍然会被检测到的问题

文章目录 1.问题产生2.解决过程3.总结4.参考资料1.问题产生 (1)首先我在场景内添加了红色的球(Sphere)和绿色的面片(Plane),两者都是StaticMeshActor,如下图所示: (2)然后进入二者的静态网格体编辑窗口,将二者的碰撞复杂度都设置为UseComplexCollisionAsSimple。 …

D. Valiant‘s New Map(二分)

Problem - D - Codeforces 游戏工作室 "DbZ Games "想在他们的热门游戏 "Valiant "中引入另一张地图。这一次&#xff0c;名为 "Panvel "的地图将以孟买市为基础。 孟买可以被表示为nm的单元格。网格中的每个单元格&#xff08;i,j&#xff09;…

【数据可视化】地理信息可视化的常见算法

1. 地图投影 地理坐标&#xff1a;是用维度、经度表示地面点位置的球面坐标 移动开发&#xff1a;移动端依靠GPS获取位置信息&#xff0c;其获得的是经纬度的信息&#xff08;WGS84&#xff09; 互联网开发中&#xff0c;需要将WGS84转换为其他互联网地图平台支持的坐标系统…

QT 九宫格绘图(QSS方式)

什么是九宫格方式绘图&#xff1f; 顾名思义&#xff0c;就是把一个方块分割成 9 个部分&#xff0c;如图所示&#xff1a; 九宫格绘图的原理就是把背景图分割成 9 个部分&#xff0c;绘制时&#xff1a; 四个角&#xff08;1、3、7、9&#xff09;的大小不变左右部分&#…

C++11标准模板(STL)- 算法(std::partial_sum)

定义于头文件 <numeric> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算范围内元素的部分和 s…

达达盈利新故事,得靠智能化“省”出来?

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文|螳螂观察 作者|叶小安 我们正处于一个最好的时代&#xff0c;不用出门就能享受到叫餐、代买衣物服饰、收发快递甚至是医院排队等服务&#xff0c;“万物皆可到家、万物即到”&#xff0c;正成为时代的潮流。 不…

【信管5.4】进度管理知识点汇总

进度管理知识点汇总在项目进度管理这一块&#xff0c;我们突然一下就接触到了不少的计算操作&#xff0c;而且接触到的工具概念也相比范围管理来说多了很多。因此&#xff0c;我们在这里进行一次小的总结。活动顺序与逻辑关系还记得什么是活动吧&#xff1f;活动就是 WBS 再次分…

NFS And Autofs

NFS&#xff08;network file system&#xff09; 挂载NFS 文件系统。NFS是一个标准的网络协议用在linux与unix之间,版本7默认使用的是NFSV4&#xff0c;NFSv4使用TCP协议&#xff0c;旧版本的NFS使用TCP或者UDP协议。 *手动挂载NFS使用mount. *自动挂载使用/etc/fstab *挂载NF…

FFmpeg常用推流命令

一、FFmpeg推RTMP流准备工作 首先确保自已已经安装了nginx rtmp服务器。 打开配置文件nginx.conf 完成如下配置 如果没有nginx rtmp服务器&#xff0c;请阅读这一篇简书文章 Mac搭建nginxrtmp服务器 二、FFmpeg推流 1.推流MP4文件 视频文件地址&#xff1a;/Users/xu/Desk…

美创DSM数据安全管理平台获华为鲲鹏技术认证!

近期&#xff0c;美创DSM数据安全管理平台通过华为鲲鹏的相互兼容性测试与认证&#xff0c;这标志着数据安全管理平台对国产信创服务器的支持&#xff0c;实现自研、国产化和自主可控。 华为鲲鹏技术认证是华为推出的一项生态合作伙伴计划&#xff0c;要求测试产品自主、可控…

健康体检管理系统源码 运营级PEIS系统源码 PEIS健康体检系统源码 PEIS源码 B/S架构开发

开发语言:ASP.NET C#,数据库:SQLserver2008R2&#xff0c;开发工具:VS2010。 前台工作&#xff1a; 预约、前台登记、照片采集、导检单打印、检验申请单打印、检前签到、检后签到、 团体设置、合并团体&#xff08;逻辑&#xff09; 医生工作&#xff1a; 数据集中录入、数…

国产linux系统使用 PageOffice 在线打开 word 文件

一、客户端环境 1、操作系统 银河麒麟&#xff0c;中标麒麟&#xff0c;统信UOS 2、芯片 芯片&#xff08;CPU)&#xff1a;x86&#xff08;Intel、兆芯&#xff09; &#xff0c;ARM&#xff08;飞腾、鲲鹏&#xff09;&#xff0c;龙芯 3、浏览器 360安全浏览器 奇安信…

NNOM神经网络语音降噪

目录 1. 问题记录和解决 2. C工程建立和运行 1. 问题记录和解决 &#xff08;1&#xff09;python语音处理依赖库soundfile 在miniconda的powershell中执行指令&#xff1a; pip install soundfile –i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com &a…

js函数篇

函数声明提升 面试题&#xff1a;先提升函数&#xff0c;再声明变量提升 arguments function fun(){var sum0;for(var i0;i<arguments.length;i){sumarguments[i];}console.log(所有参数的和是sum); } fun(33,44,23,34); 函数算法面试题 1.喇叭花数 abc a! b! c! fun…