P3200 [HNOI2009]有趣的数列

分析:

  • 这题是个思维题,通过打表也可以容易发现就是卡特兰数

  • 讲一下,是如何巧妙的转换成卡特兰数的

    由数列满足的三个条件,可以发现第 2i2i2i 位(偶数位)至少也是 2i2i2i,并且 2i2i2i 位之前的数也必然比 2i2i2i 位小

    我也不知怎么讲清楚这个转换(T_T)

    将奇数位的看作入栈,偶数位看作出栈

    然后,现在就是按照数字大小处理顺序了,求合法的序列数量,就是卡特兰数

    就比如 (1,3,2,4,5,6)(1,3,2,4,5,6)(1,3,2,4,5,6),就是(111入,222入,333出,444出,555入,666出)

  • 这题的取余数还不一定是质数,所以还要通过分解质因数来写

#include <bits/stdc++.h>
#define int long long
using namespace std;const int N=2e6+5;
int pri[N], b[N], tot;
void init(int n)
{   b[0]=b[1]=1;for(int i=2;i<=n;i++){if(!b[i]) { pri[++tot]=i; b[i]=i; } for(int j=1;i*pri[j]<=n;j++){b[pri[j]*i]=pri[j];if(i%pri[j]==0) break;} }
}
int ksm(int a,int b,int p)
{int ans=1;while(b){if(b&1) ans=ans*a%p;a=a*a%p; b>>=1;}return ans;
}
int cnt[N];
signed main()
{int n,p;cin>>n>>p;init(2*n);for(int i=1;i<=n;i++) cnt[i]=-1;for(int i=n+2;i<=2*n;i++) cnt[i]=1;for(int i=2*n;i>1;i--){if(b[i]!=i){cnt[b[i]]+=cnt[i];cnt[i/b[i]]+=cnt[i]; // 向下传递}}int ans=1;for(int i=2;i<=2*n;i++){if(i==n+1) continue;if(b[i]==i){ans=ans*ksm(i,cnt[i],p)%p;}}cout<<ans<<endl;return 0;
}

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

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

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

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

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

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

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

  4. [HNOI2009]有趣的数列

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

  5. 斐波那契数列_菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。

    描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和.给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少. 格式 输入格式 第1行是测 ...

  6. [HNOI2009] 有趣的数列

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

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

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

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

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

  9. Nowcoder 5477E. 弦(卡特兰数、组合数学)

    题目描述: 给定一个圆,圆上有2N个互不重叠的点.每次操作随机选择两个先前未选择过的点连一条弦,共连成N条弦,求所有弦不交的概率. 输入描述: 一行,只有一个整数N(1≤N≤10^7). 输出描述: ...

最新文章

  1. SAP的安装后基本设定
  2. [转] Nexus OSS 3.xx 体验
  3. C++ 拷贝构造函数应用场景
  4. Logging with Log4net (二)
  5. AdvStringGrid 垂直居中 、水平居中
  6. EOS 共识机制 (4)出块流程
  7. python除号的乘法加括号_乘除法添加括号规则
  8. 西安电子科技大学第16届程序设计竞赛G题
  9. 通过OpenShift超越云技术
  10. linux磁盘永久挂载教程,linux 永久磁盘挂载
  11. 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库
  12. linux下unix timestamp 与 可视化时间/常规时间进行转换
  13. 图片添加图片水印和文字水印
  14. MAC-VBox-Centos6.6安装增强功能
  15. python如何读取文件数据恢复_删python目录
  16. AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)
  17. beanutils.copyproperties属性值丢失_数据质量 | 脏数据?缺失值、异常值和一致性分析?...
  18. python将灰度图转为彩色值_python实现彩色图转换成灰度图
  19. 一个非常好用的插件-FeHelper
  20. HTML圆角+div立体阴影

热门文章

  1. I am a MCAD.
  2. 基于Springboot的生活方式分享平台的设计与实现
  3. JSON 命令行格式化工具【最好用的json格式化工具】
  4. android 设置空动画,Android WebView 空白等待时加载动画
  5. 函数式接口:Lambda表达式的优点
  6. DIY一个USB集线器 --- FE1.1S
  7. Matlab MEX
  8. 【小西】优化若依导出功能,若依继承导出
  9. 广西大学oj1037(小西的c语言作业)
  10. 【雷达与对抗】【2016】76-81GHz平面天线在汽车雷达中的开发与应用