正题

题目链接:https://www.luogu.com.cn/problem/P3200


题目大意

求一个长度为2∗n2*n2∗n的排列要求

  1. 奇数位和偶数位分别递增
  2. 相邻的偶数位大于奇数位

解题思路

可以看做是一个2∗n2*n2∗n的序列按顺序填进奇数和偶数位,然后因为第二个要求所以奇数位在任何时候都得比偶数位的要多,就转换为了求第nnn个卡特兰数了。

然后因为ppp不是质数所以要质因数分解来除数,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e6+10;
int n,p,tot,pri[N],cnt[N];
bool v[N];
int main()
{scanf("%d%d",&n,&p);for(int i=2;i<=2*n;i++){if(!v[i])pri[++tot]=i;for(int j=1;j<=tot&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0)break;}}for(int i=n+2;i<=2*n;i++){int x=i;for(int j=1;pri[j]*pri[j]<=x&&j<=tot;j++)while(x%pri[j]==0)x/=pri[j],cnt[j]++;if(x!=1)cnt[lower_bound(pri+1,pri+1+tot,x)-pri]++;}for(int i=1;i<=n;i++){int x=i;for(int j=1;pri[j]*pri[j]<=x&&j<=tot;j++)while(x%pri[j]==0)x/=pri[j],cnt[j]--;if(x!=1)cnt[lower_bound(pri+1,pri+1+tot,x)-pri]--;}long long ans=1;for(int i=1;i<=tot;i++)while(cnt[i])ans=ans*pri[i]%p,cnt[i]--;printf("%d\n",ans);
}

P3200-[HNOI2009]有趣的数列【卡特兰数】相关推荐

  1. P3200 [HNOI2009]有趣的数列 (巧妙转换,卡特兰数,分解质因数取模运算)

    P3200 [HNOI2009]有趣的数列 分析: 这题是个思维题,通过打表也可以容易发现就是卡特兰数 讲一下,是如何巧妙的转换成卡特兰数的 由数列满足的三个条件,可以发现第 2i2i2i 位(偶数位 ...

  2. 分解质因数-洛谷P3200 [HNOI2009]有趣的数列

    https://www.luogu.org/problem/show?pid=3200 首先,我们不能保证要求的数的逆元和模域互质: 所以我们要用分解质因数来抵消除法: 其实逆元的话即使可行也会超时: ...

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

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

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

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

  5. [HNOI2009]有趣的数列

    [HNOI2009]有趣的数列 有一个长度为2n的1~2n的全排列,保证其奇数项递增,偶数项递增,并且相邻的奇数项和偶数项,后面的偶数项大于奇数项的方案数\(mod\ p,n<=1000000, ...

  6. [HNOI2009] 有趣的数列

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

  7. BZOJ1485: [HNOI2009]有趣的数列

    题解:考虑按顺序从小到大,加入数字,将加入奇数位置看作入栈,加入偶数位置看作出栈.为什么可以?考虑我们要保证相邻奇数小于偶数,所以必须先填上一个奇数的位置才能填偶数的位置,既时刻保证奇数>=偶数 ...

  8. [Catalan数三连]网格有趣的数列树屋阶梯

    如何让孩子爱上打表 Catalan数 Catalan数是组合数学中一个常出现在各种计数问题中的数列. 以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名. 先丢个公式(设第n项为$ ...

  9. ACM常用数列(斐波那契数列、卡特兰数、贝尔数、斯特灵数)

    斐波那契数列:任意一个数是其前两位数只和,即f(i)=f(i-1)+f(i-2),f(1)=f(2)=1 该数列也满足黄金分割比例,所以又成为黄金分割数列 相关题目链接:Fibbonacci Numb ...

最新文章

  1. 切割固定长度字符串的方法_石材加工复合线条方法
  2. BCH再度领涨,BTC能否及时跟上
  3. 密码密文 android,Android密码明文密文切换
  4. jdbc hibernate ibatis 操作Blob 和Clob类型字段(不断更新)
  5. RQNOJ103_最大利润
  6. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...
  7. 8类网线利弊_知识积累 | 千兆网线和百兆网线有何区别?
  8. 外星人做系统logo_深圳福田外星人笔记本电脑维修服网点
  9. 在ionic这个框架下(Angular JS),对URL进行重写,过滤掉URL中的#号
  10. 洛谷P3048 [USACO12FEB]牛的IDCow IDs
  11. 如何实现跨项目代码复用
  12. 机房收费系统合作版(五)——初识托付
  13. 每日java制作小工具_制作Java小工具并在命令行中执行
  14. 弹性法计算方法的mck法_经济学原理中讲到的中点法计算需求弹性是怎么回事
  15. Xcode slicing 精解
  16. 国际贸易相关术语-DDP
  17. E. Arranging The Sheep
  18. python微妙级sleep
  19. 今年流行的3步走,学习前端方法路径总结
  20. 菜鸟学习SpringBoot——(一)构建一个简单的单体Springboot项目

热门文章

  1. python解析xml文件选用模块_python解析xml模块封装代码
  2. 图像处理前沿技术_深入浅出人工智能前沿技术—机器视觉检测,看清人类智慧工业...
  3. 和flag_不怕立Flag,就怕没有Flag
  4. java蛮力法背包问题_[算法课]五种蛮力法解决01背包问题
  5. 数据库年月日时分秒_数据库基本使用系列(二)
  6. 查询在具有最小内存容量的所有PC中具有最快处理器的PC制造商 (20 分)(两种思路+详解)
  7. 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
  8. 创建链表小细节(引用传递和值传递以及链表中的LinkList L、LinkList *L、LinkList L)
  9. [mybatis]映射文件_select_resultMap_discriminator鉴别器
  10. poj2182 Lost Cows-线段树