【BZOJ1485】[HNOI2009]有趣的数列(组合数学)
【BZOJ1485】[HNOI2009]有趣的数列(组合数学)
题面
题解
从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置。
偶数位置填的数的个数不能超过奇数位置填的数的个数。
好的,卡特兰数。
诶,woc,我不会卡特兰数啊。行,来学一下。
\(H(0)=H(1)=1\)
\(H(n)=\sum_{i=0}^{n-1} H(i)H(n-i-1)\)
\(H(n)=H(n-1)*\frac{4n-2}{n+1}\)
\(H(n)=\frac{C_{2n}^n}{n+1}=C_{2n}^n-C_{2n}^{n+1}\)
前几项是\(1,1,2,5,14,42,132......\)
我\(NOI\)的时候就因为不会卡特兰数少得了\(12\)分,菜死。
那么这题直接算分子分母两个部分的质因子,然后手动除一下再乘,这样与逆元无关了。
#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 2000100
int n,P,ans=1;
int pri[MAX],a[MAX],tot;
bool zs[MAX];
void pre(int n)
{
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i;
for(int j=1;j<=tot&&i*pri[j]<=n;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0)break;
}
}
}
void Divide(int x,int w)
{
for(int i=1;i<=tot&&pri[i]*pri[i]<=x;++i)
while(x%pri[i]==0)x/=pri[i],a[pri[i]]+=w;
if(x>1)a[x]+=w;
}
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%P;a=1ll*a*a%P;b>>=1;}
return s;
}
int main()
{
scanf("%d%d",&n,&P);pre(n+n);Divide(n+1,-1);
for(int i=n+n;i>n;--i)Divide(i,1);
for(int i=n;i;--i)Divide(i,-1);
for(int i=1;i<=n+n;++i)ans=1ll*ans*fpow(i,a[i])%P;
printf("%d\n",ans);
return 0;
}
【BZOJ1485】[HNOI2009]有趣的数列(组合数学)的更多相关文章
- bzoj1485: [HNOI2009]有趣的数列(Catalan数)
1485: [HNOI2009]有趣的数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2105 Solved: 1117[Submit][Stat ...
- [bzoj1485][HNOI2009]有趣的数列_卡特兰数_组合数
有趣的数列 bzoj-1485 HNOI-2009 题目大意:求所有1~2n的排列满足奇数项递增,偶数项递增.相邻奇数项大于偶数项的序列个数%P. 注释:$1\le n\le 10^6$,$1\le ...
- BZOJ1485: [HNOI2009]有趣的数列
Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...
- 【卡特兰数】BZOJ1485: [HNOI2009]有趣的数列
Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...
- BZOJ1485:[HNOI2009]有趣的数列(卡特兰数)
Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...
- BZOJ1485: [HNOI2009]有趣的数列(Catalan数,质因数分解求组合数)
题意 挺简洁的. 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…<a ...
- bzoj1485: [HNOI2009]有趣的数列(Catalan数)
一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...
- [luogu1485 HNOI2009] 有趣的数列 (组合数学 卡特兰数)
传送门 Solution 卡特兰数 排队问题的简单变化 答案为\(C_{2n}^n \pmod p\) 由于没有逆元,只好用分解质因数,易证可以整除 Code //By Menteur_Hxy #in ...
- BZOJ1485: [HNOI2009]有趣的数列(卡特兰数+快速幂)
题目链接 传送门 题面 思路 打表可以发现前六项分别为1,2,5,12,42,132,加上\(n=0\)时的1构成了卡特兰数的前几项. 看别人的题解说把每一个数扫一遍,奇数项当成入栈,偶数项当成出栈, ...
随机推荐
- Scala--操作符
一.标识符 二.中置操作符 中置表达式,操作符位于两个参数之间 1 to 10 1.to(10) 1 -> 10 1.->(10) 三.一元操作符 a.标识符() 1 toString 1 ...
- iscsi target tgt架构
tgt是用户态实现的iscsi target,而iet(iscsi enterprise target)是在内核态实现的target,tgt相比于iet来说,因为其用户态实现,方便调试,新加入一些功能 ...
- RocEDU.课程设计2018 第六组 第三周进展 博客补交
RocEDU.课程设计2018第六组 第三周进展 博客补交 小组成员:20155211解雪莹,20155217杨笛,20155227辜彦霖 计划完成任务:完成课设所有内容 实际完成任务:跑通老师uco ...
- EZ 2018 05 06 NOIP2018 慈溪中学集训队互测(五)
享受爆零的快感 老叶本来是让初三的打的,然后我SB的去凑热闹了 TM的T2写炸了(去你妹的优化),T1连-1的分都忘记判了,T3理所当然的不会 光荣革命啊! T1 思维图论题,CHJ dalao给出了 ...
- 使用pandas,7行代码实现朴素贝叶斯
作者:hhh5460 大抵分成两类 一.离散的.标签化的数据 原文没有使用pandas,我使用pandas重新实现了朴素贝叶斯算法,看起来非常简洁.清爽. import pandas as pd '' ...
- Java 利用递归删除文件以及文件夹
直接上代码: /** * 递归删除 文件/文件夹 * * @param file */ public static void deleteFile(File file) { System.out.pr ...
- 蓝牙重启case之:hardware error
蓝牙的通信分为host和controller,host端发送数据和命令到controller,controller 上传event以及数据到host端,这要求上下两端的通信要求状态一致性. 当发生状态 ...
- 微信小程序之分享或转发功能(自定义button样式)
小程序页面内发起转发 通过给 button 组件设置属性open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,如果当前页 ...
- 前端示例MVC网站
前端示例MVC网站 ASP.NET Zero 包含了一个公共web站点的前端页面和一个登陆页面.当您第一次运行项目的时候可以看到,如下图所示: 该前端网站有两个页面,一个是主页和关于我们.这些页面的内 ...
- Java中isAssignableFrom()方法与instanceof()方法用法
一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. isAssignableFrom()方法是判断是否为某个类的父类, ...