题面

dalao们都说这是一题简单的卡特兰数,画一画就出来了

emmmmm……

讲讲怎么分解质因数来算组合数

先打个表

void prim(){
ex[]=ex[]=;
for(int i=;i<=*n;i++){
if(!ex[i])pri[++cnt]=i;
for(int j=;j<=cnt&&i*pri[j]<=*n;j++){
ex[i*pri[j]]=;
if(!(i%pri[j]))break;
}
}
}

卡特兰数的公式是:

h(n)=C(n,2n)/(n+1)=(2n)!/((n!)*(n+1)!) = C(n, 2n) - C(n +1, 2n)

然后就可以分解质因数了

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef long long ll;
int n,p,cnt,pri[];
bool ex[];
int rd(){
int x=,fl=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fl=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*fl;
}
void prim(){
ex[]=ex[]=;
for(int i=;i<=*n;i++){
if(!ex[i])pri[++cnt]=i;
for(int j=;j<=cnt&&i*pri[j]<=*n;j++){
ex[i*pri[j]]=;
if(!(i%pri[j]))break;
}
}
}
int cal (int x,int y){
int ct=;
for(ll i=x;i<=y;i*=x)
ct+=y/i;
return ct;
}
ll ksm(int x,int y){
ll cnt=;
while(y){
if(y&)cnt=cnt*x%p;
x=x*x%p;
y>>=;
}
return cnt;
}
int main(){
n=rd();p=rd();
prim();
ll ans=;
for(int i=;i<=cnt;i++){
int t=cal(pri[i],*n)-cal(pri[i],n)-cal(pri[i],n+);
ans=ans*ksm(pri[i],t)%p;
}
printf("%lld",ans);
return ;
}

emmm……当个模板记吧

3200 [HNOI2009]有趣的数列的更多相关文章

  1. luogu 3200 [HNOI2009]有趣的数列 卡特兰数+质因数分解

    打个表发现我们要求的就是卡特兰数的第 n 项,即 $\frac{C_{2n}^{n}}{n+1}$. 对组合数的阶乘展开,然后暴力分解质因子并开桶统计一下即可. code: #include < ...

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

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

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

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

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

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

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

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

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

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

  7. [HNOI2009]有趣的数列 卡特兰数

    题面:[HNOI2009]有趣的数列 题解: 观察到题目其实就是要求从长为2n的序列中选n个放在集合a,剩下的放在集合b,使得集合a和集合b中可以一一对应的使a中的元素小于b. 2种想法(实质上是一样 ...

  8. 「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)

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

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

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

随机推荐

  1. Linux系统上面使用python切割nginx日志

    #!/usr/bin/python import time import os import commands path = ['/var/log/nginx/', 'access.log'] (nu ...

  2. Spring 依赖注入(基本注入和自动适配注入)

    Spring 依赖注入 Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系. 属性注入 构造注入 内部注入 自动装配 1.属性注入 IService: public in ...

  3. 应用MySQL(开启远程登录权限)

    参考“开启MySQL远程访问权限 允许远程连接”.

  4. idea搭建ssm框架

    1.file-->new-->project-->maven.... 2.建立后的目录: 3.pom.xml依赖建立: <?xml version="1.0" ...

  5. 魔力Python--经典SQL语法大全

    具体转载自哪里,我也忘记了... 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明: ...

  6. Pytorch_01 Tensor,Autograd,构建网络

    Tensor Tensor是PyTorch中的重要数据结构,可认为是一个高维数组,Tensor与numpy的ndarrays类似,但Tensor可以使用GPU加速 import torch as t# ...

  7. 20175213 2018-2019-2 《Java程序设计》第8周学习总结

    教材学习内容总结 1:泛型主要目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构. 泛型类的声明: class People<E> People是泛型类的名称,E是其中泛型,E可 ...

  8. CodeForces - 864C-Bus-(模拟加油站问题)

    https://vjudge.net/problem/CodeForces-864C 题意:两地之间有个加油站,往返走k个单程,最少加油多少次. 大佬几十行代码就解决,我却要用一百多行的if语句模拟解 ...

  9. 实际项目中如何使用git命令

    使用工具:Git Bash 工作空间项目存放路径C:/用户/git/demoProject 操作步骤: 1.切换到git项目路径 cd  git/demoProject 2.git status   ...

  10. 使用CP进行应用层程序控制

    测试版本:R80.20 Step1:开启软刀片的URL过滤和APP控制,如下图: Step2:编辑访问策略,在层编辑器中勾选刀片的“应用程序和URL过滤”,“内容识别”,如下图: Step3:新建一条 ...