---恢复内容开始---

题目描述

我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件:

(1)它是从1到2n共2n个整数的一个排列{ai};

(2)所有的奇数项满足a1<a3<...<a2n-1,所有的偶数项满足a2<a4<...<a2n;

(3)任意相邻的两项a2i-1与a2i(1<=i<=n)满足奇数项小于偶数项,即:a2i-1<a2i。

现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。

输入输出格式

输入格式:

输入文件只包含用空格隔开的两个整数n和P。输入数据保证,50%的数据满足n<=1000,100%的数据满足n<=1000000且P<=1000000000。

输出格式:

仅含一个整数,表示不同的长度为2n的有趣的数列个数mod P的值。

输入输出样例

输入样例#1: 复制

3 10
输出样例#1: 复制

5
对应的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)。 ------------------------------------------------------------------------------------------------- 做之前我知道这是一道
关于Catalan数的问题
但是
当我读完题目后
我是真的蒙了
它是怎么和Catalan数挂上关系的
于是
我再次被卑微了
————————————————————————————————————————————————————————————————————————————————————

考察这样相邻的两项:a_{2i-1}a2i−1​与a_{2i}a2i​,根据题目的第二条原则显然有a_{2i-1}<a_{2i}a2i−1​<a2i​。

而根据第一条原则又有奇数是递增的。

所以有a_1<a_3<...<a_{2i-1}<a_{2i}a1​<a3​<...<a2i−1​<a2i​。

这个时候可以联想到这道经典的题目

我们可以将奇数项看为入栈,偶数项看为出栈。

发现和入栈次数必须大于出栈次数的条件恰好相符。

所以可以使用卡特兰数求解。

但是直接暴力用公式是会爆的

所以需要一些优化

#include <bits/stdc++.h>
using namespace std;
long long i,j,n,m,ans,sum,x,a[],b[],p[];
int main()
{
scanf("%lld%lld",&n,&m); for (i=; i<=*n; i++)
{
if (a[i]==)
{
sum++;
p[sum]=i;
a[i]=sum;
}//sum累加,p数组标记第sum个质数为i ,a[i]表示i这个数是由第sum个质数筛得的
for (j=; j<=sum; j++) //枚举当前已得到的所有质数,用这些质数筛选出在范围内的可以被这些质数筛得合数
if (p[j]*i<=*n)
a[p[j]*i]=j;
else
break;
//并把筛到的合数标记是被第几个质数 筛到的
} for (i=n+; i<=*n; i++)
{
x=i;
while (x>)
{
b[a[x]]++;
x=x/p[a[x]];
} //a[x]表示第x个数是由第a[x]个质数筛得的, 然后把表示第a[x]个质数个数的数组累加
//做完上述操作后将x除以已累加的质数
} for (i=; i<=n; i++)
{
x=i;
while (x>)
{
b[a[x]]--;
x=x/p[a[x]];
} //重复上述操作
}
ans=;
for (i=; i<=sum; i++)
for (j=; j<=b[i]; j++)
ans=ans*p[i]%m; //p[i]表示第i个质数是什么,b[i]表示有第i个质数共有几个
printf("%lld",ans);
return ;
}

P3200 [HNOI2009]有趣的数列--洛谷luogu的更多相关文章

  1. 洛谷P3200 [HNOI2009]有趣的数列(Catalan数)

    P3200 [HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足 ...

  2. 【题解】洛谷P3200 [HNOI2009] 有趣的数列(卡特兰数+质因数分解)

    洛谷P3200:https://www.luogu.org/problemnew/show/P3200 思路 这题明显是卡特兰数的题型咯 一看精度有点大 如果递推卡特兰数公式要到O(n2) 可以证明得 ...

  3. P3200 [HNOI2009]有趣的数列

    题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<...<a2n ...

  4. Luogu P3200 [HNOI2009]有趣的数列

    题意 给定 \(n\),求有多少个长度为 \(2n\) 的排列 \(p\) 满足 对于 \(1\leq i\leq n\),\(p_{2i-1}<p_{2i}\). \(p_1<p_3&l ...

  5. 【BZOJ1485】[HNOI2009]有趣的数列(组合数学)

    [BZOJ1485][HNOI2009]有趣的数列(组合数学) 题面 BZOJ 洛谷 题解 从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置. 偶数位置填的数的个数不能超过奇数位置填的数的 ...

  6. BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )

    打个表找一下规律可以发现...就是卡特兰数...卡特兰数可以用组合数计算.对于这道题,ans(n) = C(n, 2n) / (n+1) , 分解质因数去算就可以了... -------------- ...

  7. BZOJ 1485: [HNOI2009]有趣的数列 [Catalan数 质因子分解]

    1485: [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所 ...

  8. BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数

    BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ ...

  9. [HNOI2009]有趣的数列 题解(卡特兰数)

    [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满 ...

随机推荐

  1. HTML DOM classList 属性

    页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增.删除.修改节点上的CSS类.使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类. 添加 ...

  2. 四. Redis事务处理

    Redis目前对事务的支持还是比较简单,Redis能保证一个Client发起的事务中的命令可以连续执行,而中间不会插入其他Client的命令:当一个Client在连接中发起一个multi命令的时候,这 ...

  3. Android 7.0 新特性

    Android7.0提供新功能以提升性能.生产效率和安全性. 关于Android N的性能改进,Android N建立了先进的图形处理Vulkan系统,能少的减少对CPU的占用.与此同时,Androi ...

  4. Java虚拟机(五)Java的四种引用级别

    1.前言 HotSpot采取了可达性分析算法用来判断对象是否被能被GC,无论是引用计算法还是可达性分析算法都是判断对象是否存在引用来判断对象是否存活.如果reference类型的数据中存储的数值代表的 ...

  5. DAY5(PYTHON) 字典的增删改查和dict嵌套

    一.字典的增删改查 dic={'name':'hui','age':17,'weight':168} dict1={'height':180,'sex':'b','class':3,'age':16} ...

  6. .net、mono和C#

    .net wiki:en  chs .net版本 公共语言运行时(CLR) 发布时间 随同分发的Visual Studio 预装于windows系统 支持的windows系统 1.0 1.0 2002 ...

  7. mysql服务自启【Linux】

    1.复制启动脚本到资源目录 2.增加mysqld服务控制脚本执行权限 3.mysql服务添加到系统服务 4.检测mysqld服务是否生效 表明服务已经启动,以后可以使用service命令启动mysql ...

  8. 省市区三级联动(附j全国省市区json文件)

    效果如图所示: 首先提供全国所有省份的JS文件 下载地址:https://files.cnblogs.com/files/likui-bookHouse/address.rar 打开js内容如下: h ...

  9. 洗礼灵魂,修炼python(66)--爬虫篇—BeauitifulSoup进阶之“我让你忘记那个负心汉,有我就够了”

    说明一下,这个标题可能有点突兀,结合上一篇一起看就行 前面已经对BeautifulSoup有了了解了,相信你基本已经学会怎么获取网页数据了,那么BeautifulSoup这么吊,还有没有其他的功能呢? ...

  10. SQL SERVER 查询表的各字段长度

    SELECT a.name,b.name,c.DATA_TYPE,b.max_length FROM sys.tables a join sys.columns b on b.object_id = ...