[题解]CF1581A CQXYM Count Permutations

题目描述:
CF1581A CQXYM Count Permutations
思路:
问你有多少 1 到 2n 的排列满足 a i a_i ai < < < a i + 1 a_{i+1} ai+1个数 ≥ \ge n n n
因为对于一个满足 a i a_i ai < < < a i + 1 a_{i+1} ai+1个数 ≥ \ge n n n 1 1 1 2 n 2n 2n 的排列 a a a
我们取 b i b_i bi= 2 n 2n 2n − - a i a_i ai + + + 1 1 1
那么 b b b 是一个满足 a i a_i ai < a i + 1 <a_{i+1} <ai+1个数 < < < n n n 1 1 1 2 n 2n 2n
且所有满足 a i a_i ai < < < a i + 1 a_{i+1} ai+1个数 ≥ \ge n 的 1 1 1 2 n 2n 2n 的排列与 满足 a i a_i ai < < < a i + 1 a_{i+1} ai+1个数 < < < n n n 1 1 1 2 n 2n 2n 的排列一一映射。
因此满足 a i a_i ai < < < a i + 1 a_{i+1} ai+1
个数 ≥ \ge n 的 1 1 1 2 n 2n 2n 的排列个数就是 1 1 1 2 n 2n 2n 的排列个数的一半。
1 1 1 2 n 2n 2n 的排列个数就是 ( 2 n ) ! (2n)! (2n)!
因此答案为 ( 2 n ) ! 2 \dfrac{(2n)!}{2} 2(2n)!
一定要注意模的值,是 1 0 9 10^9 109 + + + 7 7 7
(我第一次写成了 1 0 8 10^8 108 + + + 7 7 7,当场0pts…)
贴AC代码:

#include<bits/stdc++.h>
using namespace std;
long long ans(long long n){
	long long sum=1;
	for(long long i=3;i<=2*n;i++)
		sum=sum*i%1000000007;
	return sum;
}
long long t,n;
int main(){
	scanf("%lld",&t);
	for(long long i=1;i<=t;i++){
		scanf("%lld",&n);
		printf("%lld\n",ans(n));
	}
	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
国赛题目一般来源于科学与工程技术、人文与社会科学等领域经过适当简化加工的实际问题。参赛者不需要预先掌握深入的专门知识,只需要学过高等学校的数学基础课程。对于解题思路,可以根据题目要求进行以下步骤来完成建模和求解: 1. 理解题目:仔细阅读题目,理解问题的背景和要求。注意提取关键信息,明确问题的目标和约束条件。 2. 建立数学模型:根据题目的描述和要求,将实际问题转化为数学模型。可以使用已知的数学理论、公式和方法,结合问题的特点进行建模。根据问题类型,可以将问题归类为分类问题、优化问题、预测问题或评价问题。 3. 求解模型:根据建立的数学模型,使用适当的数学工具和方法进行求解。可能需要进行数值计算、优化算法或统计分析等操作,以得到问题的解答。 4. 分析和检验结果:对求解结果进行分析和检验,验证其合理性和正确性。可以通过对比实际数据或进行敏感性分析来评估模型的准确性和可靠性。 5. 模型的改进:根据对结果的分析和检验,对模型进行改进。可以尝试不同的假设或调整参数,以提高模型的性能和适应性。 综上所述,解题思路主要包括理解题目、建立数学模型、求解模型、分析和检验结果以及模型的改进。具体的解题思路会根据不同的题目和问题类型有所差异,建议参赛者根据具体题目要求和自身的数学知识经验,灵活运用数学方法和工具,进行问题的建模和求解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值