[HNOI2009]有趣的数列

题目描述

我们称一个长度为

2

n

2n

2n 的数列是有趣的,当且仅当该数列满足以下三个条件:

  • 它是从

    1

    2

    n

    1 \sim 2n

    1∼2n 共

    2

    n

    2n

    2n 个整数的一个排列

    {

    a

    n

    }

    n

    =

    1

    2

    n

    \{a_n\}_{n=1}^{2n}

    {an​}n=12n​;

  • 所有的奇数项满足

    a

    1

    <

    a

    3

    <

    <

    a

    2

    n

    1

    a_1<a_3< \dots < a_{2n-1}

    a1​<a3​<⋯<a2n−1​,所有的偶数项满足

    a

    2

    <

    a

    4

    <

    <

    a

    2

    n

    a_2<a_4< \dots <a_{2n}

    a2​<a4​<⋯<a2n​;

  • 任意相邻的两项

    a

    2

    i

    1

    a_{2i-1}

    a2i−1​ 与

    a

    2

    i

    a_{2i}

    a2i​ 满足:

    a

    2

    i

    1

    <

    a

    2

    i

    a_{2i-1}<a_{2i}

    a2i−1​<a2i​。

对于给定的

n

n

n,请求出有多少个不同的长度为

2

n

2n

2n 的有趣的数列。
因为最后的答案可能很大,所以只要求输出答案对

p

p

p 取模。

输入格式

一行两个正整数

n

,

p

n,p

n,p

输出格式

输出一行一个整数表示答案。

输入输出样例

样例输入1

3 10

样例输出1

5

说明/提示

【数据范围】
对于

50

%

50\%

50% 的数据,

1

n

1000

1\le n \le 1000

1≤n≤1000;
对于

100

%

100\%

100% 的数据,

1

n

1

0

6

1\le n \le 10^6

1≤n≤106,

1

p

1

0

9

1\le p \le 10^9

1≤p≤109。

【样例解释】
对应的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)。

Code

#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL n, p, ans = 1, k;
int vis[2000005]; LL qmi(LL a, LL b, LL p)
{
LL res = 1;
while (b)
{
if (b & 1)
res = res * a % p;
a = a * a % p;
b >>= 1;
}
return res;
} void c(LL x, LL p, LL f)
{
while (x)
k += f * x / p, x /= p;
} int main()
{
cin >> n >> p;
for (LL i(2); i <= 2 * n; ++i)
{
if (vis[i])
continue;
k = 0;
c(2 * n, i, 1);
c(n + 1, i, -1);
c(n, i, -1);
ans = ans * qmi(i, k, p) % p;
for (LL j(2 * i); j <= 2 * n; j += i)
vis[j] = 1;
}
cout << ans;
return 0;
}

广告

绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/

绿树智能 - 官方网站:https://wangping-lvshu.github.io/LvshuZhineng/

(现在使用,人人均可获得300元大奖)

[HNOI2009]【一本通提高组合数学】有趣的数列的更多相关文章

  1. P2532 [AHOI2012]【一本通提高组合数学】树屋阶梯

    [AHOI2012]树屋阶梯 题目描述 输入格式 一个正整数N( 1 ≤ N ≤ 500 1\le N \le 500 1≤N≤500),表示阶梯的高度. 输出格式 一个正整数,表示搭建方法的个数.( ...

  2. P2183 [国家集训队]【一本通提高组合数学】礼物

    [国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ...

  3. 【一本通提高组合数学】 计算系数(NOIP2011提高组)

    题面 思路 根据二项式定理, 那么 算  需要用快速幂. 可以根据组合式的递推公式算组合数.我是这么写的. 或者是利用组合数的定义式,但是因为有取余, 所以要用逆元. 其中  为逆元, 这个可以直接用 ...

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

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

  5. 【BZOJ】【1485】【HNOI2009】有趣的数列

    Catalan数/组合数取模 Aha!这题我突然灵光一现就想到Catalan数……就是按顺序安排1~2n这些数(以满足前两个条件)……分配到奇数位置上的必须比偶数位置上的多(要不就不满足第三个条件了) ...

  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. EFCore常规操作生成的SQL语句一览

    前言 EFCore的性能先不说,便捷性绝对是.Net Core平台下的ORM中最好用的,主要血统还百分百纯正. EFCore说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生 ...

  2. 39. Combination Sum - LeetCode

    Question 39. Combination Sum Solution 分析:以candidates = [2,3,5], target=8来分析这个问题的实现,反向思考,用target 8减2, ...

  3. 好客租房28-state和this.setState(this.setState修改状态)

    状态是改变的 语法:this.setstate 千万不要直接改变this.setState setState 修改state 更新ui 数据驱动视图 //导入react     import Reac ...

  4. [C++STL] 迭代器 iterator 的使用

    定义 迭代器是一种检查容器内元素并遍历元素的数据类型,表现的像指针. 基本声明方式 容器::iterator it = v.begin();//例:vector<int>::iterato ...

  5. 第31章 Spring bean 作用域

    每日一句 I must say a word about fear. It is life's only true opponent. Only fear can defeat life. 这里必须说 ...

  6. Python汉诺塔求解

    1 def hanoi(n,a,b,c): 2 3 if(n>0): 4 5 hanoi(n-1,a,b,c) 6 7 print("Move disc no:%d from pile ...

  7. 魔改了一下bootstrap-treeview组件,发布个NPM包体验一下

    前言 之前在这篇文章 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示 中说到,我为了让文章分类列表支持层级结构,用了一个树形组件,不过这个组件太老了,使用的Boots ...

  8. docker安装nginx,配置SSL

    nginx安装 下载镜像并测试 1.docker pull nginx 2.docker images nginx 查看我们拉取到本地的nginx镜像IMAGE ID 3.首先测试下nginx镜像是否 ...

  9. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...

  10. Makefile基础语法

    Makefile的作用 如果没有Makefile,每次修改源代码后,如果要重新编译代码,都要输入编译命令,当源代码很多时,效率很底下. 基本格式 target: componsnts TAB rule ...