bzoj1485:[HNOI2009]有趣的数列
思路:首先限制数很多,逐步来考虑,限制一很容易满足,考虑限制二,也就是让奇数位和偶数位上的数递增,限制三就是让奇数位上的数小于奇数位加一对应的偶数位上的数,那么我们可以把形成序列的过程看成加数的过程,从小到大逐步加(这显然满足限制一),然后加数的条件一是从小到大依次放奇数位或偶数位,因此也满足限制二,然后无论何时奇数位上的数一定要大于等于偶数位上的数,这样也满足了限制三,那么问题就转化成了按照如上条件放数的方案数,联系第二个条件,也就是无论何时奇数位上的数一定要大于等于偶数位上的数,联想到了什么?没错,就是栈,进栈次数一定要大于等于出栈次数,不妨把放在奇数位上看成进栈,放在偶数位上看成出栈,这样就是求一个出栈的序列,也就是Catalan数列。
然后p不一定是素数,也就是不能求逆元,那么就可以分解质因数,乘一个数相当于把一个数的所有质因数乘一遍,就可以用一个数组记录一下所有数被乘了多少遍,那么乘就是加一,除就是减一,然后n最大为1e6,暴力求每个数的质因数是n*sqrt(n)的,显然会T(然而我还傻乎乎地交了一遍,看到跑了那么久猛然醒悟过来。。。。。),于是就可以线筛统计出每个数的最小质因数,然后求每个数的所有质因数时每次除以最小质因数就好了,然后最小质因数一定>=2,因此这样是nlogn的(而且一点也不严格),然后就可以飞快跑过本题。
#include<bits/stdc++.h>
using namespace std;
#define maxn 3000005 int n,p,ans=1,tot;
int f[maxn],prime[maxn],pos[maxn];
bool isprime[maxn]; int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
return x*f;
} void change(int x,int val){
for (;x!=1;) f[prime[pos[x]]]+=val,x/=prime[pos[x]];
} int power(int a,int k,int p){
int x=1;
for (;k;k>>=1,a=1ll*a*a%p) if (k&1) x=1ll*x*a%p;
return x;
} int main(){
n=read(),p=read();memset(isprime,1,sizeof(isprime));
for (int i=2;i<=2*n;i++){
if (isprime[i]) prime[++tot]=i,pos[i]=tot;
for (int j=1;i*prime[j]<=2*n&&j<=tot;j++){
isprime[i*prime[j]]=0,pos[i*prime[j]]=j;
if (i%prime[j]==0) break;
}
}
for (int i=2*n;i>n+1;i--) change(i,1);
for (int i=1;i<=n;i++) change(i,-1);
for (int i=1;i<=tot;i++) if (f[prime[i]]) ans=1ll*ans*power(prime[i],f[prime[i]],p)%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$ ...
- BZOJ1485: [HNOI2009]有趣的数列(卡特兰数+快速幂)
题目链接 传送门 题面 思路 打表可以发现前六项分别为1,2,5,12,42,132,加上\(n=0\)时的1构成了卡特兰数的前几项. 看别人的题解说把每一个数扫一遍,奇数项当成入栈,偶数项当成出栈, ...
- 【BZOJ1485】[HNOI2009]有趣的数列(组合数学)
[BZOJ1485][HNOI2009]有趣的数列(组合数学) 题面 BZOJ 洛谷 题解 从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置. 偶数位置填的数的个数不能超过奇数位置填的数的 ...
- 「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)
「BZOJ1485」[HNOI2009] 有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai ...
随机推荐
- 【原创】Mac上编译Hadoop1.0.3出现的一些问题
create-native-configure: [exec] configure.ac:47: error: possibly undefined macro: AC_PROG_LIBTOOL [e ...
- HW4.9
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- hdu3394--Railway(点的双连通分量)
一个公园中有 n 个景点,景点之间通过无向的道路来连接,如果至少两个环公用一条路,路上的游客就会发生冲突:如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 每一个连通 ...
- HDU 1102 Constructing Roads (最小生成树)
最小生成树模板(嗯……在kuangbin模板里面抄的……) 最小生成树(prim) /** Prim求MST * 耗费矩阵cost[][],标号从0开始,0~n-1 * 返回最小生成树的权值,返回-1 ...
- A Tour of Go Basic types
Go's basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr ...
- Mysql相关问答
问:我们团队中的一人想要使用 bigint 字段类型来代替 25-30 长度的 varchar 类型来存储 CRC64 数据,然后将索引也改成 bigint 的索引,这会节省索引的空间.请问这否是合理 ...
- HTML5初学者福利!11个在线学习网站推荐
HTML5初学者福利!11个在线学习网站推荐 HTML5的强大及流行趋势,让更多的人想要系统的对它进行学习.而大多数人获取HTML5知识的重要途径都是网络,不过面对五花八门的搜索结果,是不是觉得摸不着 ...
- Brief描述子
一.Brief算法 1.基本原理 BRIEF是2010年的一篇名为<BRIEF:Binary Robust Independent Elementary Features>的文章中提出,B ...
- 如何调试msbuild?
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何调试msbuild?.
- android 开源项目学习<二>
roottools: RootTools gives Rooted developers easy access to common rooted tools... https://code.g ...