当前位置: 首页 > backend >正文

【TUST“码蹄杯”编程之星】4.30 每日一题

题目要求

计算长度为 2n的排列中,满足以下条件的排列数目(模 1e9+7):

至少有 n个相邻位置满足前一个数小于后一个数。

例子解析:
当 n = 1 时,只有一种排列满足条件:[1, 2]。在排列 [1, 2] 中,p₁ < p₂,并且有一个 i = 1 满足条件。由于 1 ≥ n,这个排列应该被计入。在排列 [2, 1] 中,p₁ > p₂。因为 0 < n,这个排列不应被计入。

当 n = 2 时,有 12 种排列:[1, 2, 3, 4]、[1, 2, 4, 3]、[1, 3, 2, 4]、[1, 3, 4, 2]、[1, 4, 2, 3]、[2, 1, 3, 4]、[2, 3, 1, 4]、[2, 3, 4, 1]、[2, 4, 1, 3]、[3, 1, 2, 4]、[3, 4, 1, 2]、[4, 1, 2, 3]。

前置知识:快速幂,乘法逆元,阶乘取模,数学思维

输入格式

一行一个整数 n。

输出格式q

输出结果模 1e9+7 后的值

输入数据:

6666

实现步骤

1.操作观察

在长度为 2n 的排列中,要求至少有 n 个相邻位置满足前一个数小于后一个数

在长度为 2n 的排列中,总共有 2n-1 个相邻位置,每个位置要么升序要么降序。关键性质是:
如果将排列中的每个数 i 变为 (2n+1-i),那么原本的升序位置会变成降序位置,反之亦然。这种变换操作建立了满足条件排列与不满足条件排列之间的一一对应关系。
因此,在全部 2n! 个排列中,恰好一半满足"至少有 n 个升序位置"的条件,答案就是 (2n!)/2。

需要计算阶乘后取模,并处理除以 2 的操作

乘法逆元主要用于解决模运算中的除法问题。在模运算中,我们不能直接进行除法运算,但可以通过乘以逆元来实现同样效果

2.实现思路

输入n
使用循环计算 2n! 并对 10^9+7 取模
使用快速幂计算 2 的乘法逆元
将阶乘与逆元相乘并取模,得到最终结果
输出res即可。

代码示例

#include <bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef __int128_t i128;
const int M = 1e9 + 7;i64 quick_pow(i64 a, i64 b)
{i64 res = 1;while (b){if (b & 1)res = (res * a) % M;a = (a * a) % M;b >>= 1;}return res;
}void solve()
{int n;cin >> n;i64 fac = 1;for (int i = 1; i <= 2 * n; i++){fac = (fac * i) % M;}i64 inv_2 = quick_pow(2, M - 2); // 费马小定理计算乘法逆元i64 res = (fac * inv_2) % M;cout << res << endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);solve();return 0;
}

答案

运行代码得到答案
145835579

http://www.xdnf.cn/news/3198.html

相关文章:

  • 抓取工具Charles配置教程(mac电脑+ios手机)
  • 算法四 习题 1.3
  • Vue 项目中运行 `npm run dev` 时发生的过程
  • 代码随想录算法训练营Day39
  • 数据科学与计算
  • Ecology中拦截jquery.ajax请求接口后的数据
  • 【Linux更新openSSH服务】
  • GNU gettext 快速上手
  • 论文公式根据章节自动编号教程
  • DeepSeek-Prover-V2-671B 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • 涨薪技术|0到1学会性能测试第42课-apache监控与调优
  • 应对过度处方挑战:为药物推荐任务微调大语言模型(Xiangnan He)
  • K8S - HPA + 探针实战 - 实现弹性扩缩与自愈
  • 详解 MyBatis-Plus 框架中 QueryWrapper 类
  • Compose笔记(二十一)--AnimationVisibility
  • 学习笔记——《Java面向对象程序设计》-常用实用类
  • Python爬虫(11)Python数据存储实战:深入解析NoSQL数据库的核心应用与实战
  • OpenCV实战教程:从零开始的计算机视觉之旅
  • 鸿蒙NEXT开发动画(方块动画旋转)
  • ESP32开发-作为TCP服务端接收数据
  • 配置和使用基本存储
  • 大型连锁酒店集团数据湖应用示例
  • 关于vue+iview中tabs嵌套及实际应用
  • 如何在uni-app中自定义输入框placeholder的样式
  • 2025年“深圳杯”数学建模挑战赛D题-法医物证多人身份鉴定问题
  • TCP和UDP的数据传输+区别
  • JavaScript的3D库有哪些?
  • 第六章 QT基础:9、Qt中数据库的操作
  • 自主采集高质量三维重建数据集指南:面向3DGS与NeRF的图像与视频拍摄技巧【2025最新版!!】
  • 『深夜_MySQL』详解数据库 探索数据库是如何存储的