01序列 卡特兰数

news2025/2/26 8:08:04

 解法:

将01序列置于坐标轴上,起始点为原点。0表示向右走,1表示向上走。这样就可以将前缀0的个数不少于1的个数就可以转换为路径上的点,横坐标大于纵坐标,也就是求合法路径个数。

注意题目mod的数是质数,所以可以使用快速幂求逆元,若不是质数,则需要使用扩展欧几里得算法求逆元。 

快速幂:

//01序列 卡特兰数
#include<iostream>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;

//因为mod的数是质数可以用快速幂
//如果不是质数就用扩展欧几里得
ll qmi(ll a, ll k, ll p)
{
	ll res = 1;

	while (k)
	{
		if (k & 1) res = res * a % p;
		a = a * a % p;
		k >>= 1;
	}
	return res;
}
//答案为C2n n /n + 1
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll n; cin >> n;

	ll a = 2 * n, b = n, res = 1;

	for (ll i = a; i > a - b; --i) res = res * i % mod;
	for (ll i = 1; i <= b; ++i) res = res * qmi(i, mod - 2, mod) % mod;

	res = res * qmi(n + 1, mod - 2, mod) % mod;
	cout << res;
	return 0;
}

扩展欧几里得:

//01序列 扩展欧几里得
#include<iostream>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;

ll exgcd(ll a, ll b, ll& x, ll& y)
{
	if (!b)
	{
		x = 1, y = 0;
		return a;
	}

	ll d = exgcd(b, a % b, y, x);
	y -= a / b * x % mod;
	return d;
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

	ll n, x, y; cin >> n;
	ll a = 2 * n, b = n;
	ll res = 1;

	for (ll i = a; i > a - b; --i) res = res * i % mod;
	for (ll i = 1; i <= b; ++i)
	{
		exgcd(i, mod, x, y);
		res = res * x % mod;
	}
	exgcd(n + 1, mod, x, y);
	res = (res * x % mod + mod) % mod;
	cout << res;
	return 0;
}

 

 

 

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

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

相关文章

【嵌入式项目应用】__单片机STM32有什么好的裸机程序架构思路推荐?

目录 前言 没设计好程序架构&#xff0c;根本做不稳定。 按照我的思维&#xff0c;我会这样去设计程序&#xff1a; 那这样的好处是什么&#xff1f; (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 前言 在我刚出来的时候&#x…

Android笔记(十三):结合JetPack Compose和CameraX实现视频的录制和存储

在“Android笔记&#xff08;八&#xff09;&#xff1a;基于CameraX库结合Compose和传统视图组件PreviewView实现照相机画面预览和照相功能”&#xff0c;文中介绍了拍照功能的实现&#xff0c;在本文中将介绍结合JetPack Compose和CameraX实现视频的录制。 新建一个项目 在项…

nn.Embedding()的原理

nn.Embedding()的原理&#xff1a; 定义一个Embedding&#xff1a; embeddings nn.Embedding(num_embeddings10, embedding_dim3)vocab_size : 10 输出维度为&#xff1a; 3 假定输入inputs如下&#xff1a; inputs torch.tensor([[1,3,6, 8],[9,1,3,5] ],dtypetorch.lo…

达索系统SOLIDWORKS Electrical机电一体化协同设计

一秒读懂 SOLIDWORKS Electrical 问题点 电气、机械设计各自为政数据传递困难&#xff0c;存在设计错误 CHALLENGE电气设计面临挑战 问题点&#xff1a;电气、机械设计各自为政数据传递困难&#xff0c;存在设计错误 原理图绘制完毕后&#xff0c;再绘制接线图,人工统计BOM&a…

Valgrind——程序分析工具

目录 Valgrind一.摘要二.安装Valgrind三,简单上手和分析程序1(C程序):使用未初始化的内存程序2(C程序):在内存被释放后进行读/写程序3(C程序): 内存泄露程序4(C程序): 不匹配使用malloc free 和 new delete程序5(C程序): 两次释放内存 四.Qt中使用Valgrind五.内存泄露分析 Valg…

Java学习day12:static关键字,字符串声明,字符串常量池

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) 往期回顾&#xff1a; Java学习day11&…

HBase中的数据表是如何用CHAT进行分区的?

问CHA&#xff1a;HBase中的数据表是如何进行分区的&#xff1f; CHAT回复&#xff1a; 在HBase中&#xff0c;数据表是水平分区的。每一个分区被称为一个region。当一个region达到给定的大小限制时&#xff0c;它会被分裂成两个新的region。 因此&#xff0c;随着数据量的增…

Unity | 运行时显示调试信息

「公众号&#xff1a;游戏开发手记」 1 简介 在 Unity 编辑器中&#xff0c;我们可以通过点击 Stats 按钮来查看 Statistics 面板&#xff0c;这个面板显示了许多关于游戏渲染的信息&#xff0c;如每帧的渲染时间、Tris 和 Verts 的数量、SetPass Calls 的数量等。但在其他运…

Spring6(五):Resources、i18n、Validation

文章目录 7. 资源操作&#xff1a;Resources7.1 Resource接口7.2 Resource的实现类7.2.1 UrlResource访问网络资源7.2.2 ClassPathResource 访问类路径下资源7.2.3 FileSystemResource 访问文件系统资源7.2.4 其他 7.3 Resource类图7.4 ResourceLoader 接口7.5 ResourceLoaderA…

EV代码签名证书

为了增强软件的安全性和可信度&#xff0c;EV代码签名证书&#xff08;Extended Validation Code Signing Certificate&#xff09;成为了一种具有最高级别保障的关键工具。 EV代码签名证书是一种由受信任的证书颁发机构&#xff08;CA&#xff09;或证书供应商提供的高级别代…

linux之shell

一、是什么 Shell是一个由c语言编写的应用程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言 它连接了用户和Linux内核&#xff0c;让用户能够更加高效、安全、低成本地使用 Linux 内核 其本身并不是内核的一部分&#x…

创建SpringBoot项目后无法运行Java文件的解决方法

目录 1.无法运行 &#xff08;1&#xff09;解决方法一 &#xff08;2&#xff09;解决方法二 2.包无法下载 &#xff08;1&#xff09;查看pom.xml文件中包是否存在的方法 &#xff08;2&#xff09;如果仓库存在包的处理方式 1.无法运行 当我们创建好一个SpringBoot项目…

make和makefile

一、认识make和Makefile 1、会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 2、一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译…

借助Spire.Doc for Java控件,将 ODT 转换为 PDF。

在通过电子邮件发送或与其他人共享 ODT 文件之前&#xff0c;您可能需要将该文件转换为 PDF&#xff0c;以便任何人都可以跨多个操作系统访问该文件。在本文中&#xff0c;您将学习如何使用Spire.Doc for Java在 Java 中将 ODT 转换为 PDF。 Spire.Doc 是一款专门对 Word 文档…

中国生态功能保护区shp数据

代码 名称 类型 1 秦岭山地生态功能保护区 水涵养生态功能保护区 2 若尔盖一玛曲生态功能保护区 水涵养生态功能保护区 3 滇西北生态功能保护区 水涵养生态功能保护区 4 珠江源&#xff08;云南部分&#xff09;生态功能保护区 水涵养生态功能保护区 5 雅鲁藏布…

什么是游戏盾?怎么进行防护?

一.德迅游戏盾&#xff08;抗D盾&#xff09;概述 1.抗D盾是针对游戏行业推出的高度可定制的网络安全解决方案&#xff0c;可以针对大型DDoS攻击(T级别)进行有效防御&#xff0c;同时能彻底解决游戏行业特有的TCP协议的CC攻击问题。 2.抗D盾是新一代的智能分布式云接入系统&a…

骨传导蓝牙耳机排行榜,精选五款骨传导耳机推荐!

目前市面上的骨传导耳机大多是传统挂耳式&#xff0c;虽然佩戴更稳固&#xff0c;但是也限制住了其使用场景&#xff0c; 但近两年&#xff0c;有一款名为骨传导耳机的品类进入了大众的视野&#xff0c;它以独特的款式和超乎以往的佩戴舒适性迅速圈粉无数&#xff0c;并成为当下…

第一讲之递归与递推下篇

第一讲之递归与递推下篇 带分数费解的开关飞行员兄弟翻硬币 带分数 用暴力将所有全排列的情况都算出来 > 有三个数&#xff0c;a,b,c 每种排列情况&#xff0c;可以用两层for循环&#xff0c;暴力分为三个部分&#xff0c;每个部分一个数 当然注意这里&#xff0c;第一层fo…

【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)

前言 我们都知道Spring 框架主要的优势是在 简化开发 和 框架整合 上&#xff0c;至于如何实现就是我们要学习Spring 框架的主要内容&#xff0c;今天我们就来一起学习Spring中的两大核心技术IoC&#xff08;控制反转&#xff09;与DI&#xff08;依赖注入&#xff09;。 文章目…

关于CISSP中文版计算机化自适应考试(CAT),你需要知道的!

进入ISC2宣布CISSP简体中文的线性考试(Linear Test)被取消&#xff0c;逐步实行CISSP中文版计算机化自适应考试&#xff08;CAT&#xff09;。接下来我根据ISC2官网和互联网中关于CAT相关信息&#xff0c;给大家对CISSP认证CAT进行介绍。 一、什么是CISSP认证线性考试&#xf…