P3200 [HNOI2009]有趣的数列 (巧妙转换,卡特兰数,分解质因数取模运算)
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]有趣的数列 (巧妙转换,卡特兰数,分解质因数取模运算)相关推荐
- 分解质因数-洛谷P3200 [HNOI2009]有趣的数列
https://www.luogu.org/problem/show?pid=3200 首先,我们不能保证要求的数的逆元和模域互质: 所以我们要用分解质因数来抵消除法: 其实逆元的话即使可行也会超时: ...
- 「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)
「BZOJ1485」[HNOI2009] 有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai ...
- 【BZOJ1485】[HNOI2009]有趣的数列(组合数学)
[BZOJ1485][HNOI2009]有趣的数列(组合数学) 题面 BZOJ 洛谷 题解 从小往大填数,要么填在最小的奇数位置,要么填在最小的偶数位置. 偶数位置填的数的个数不能超过奇数位置填的数的 ...
- [HNOI2009]有趣的数列
[HNOI2009]有趣的数列 有一个长度为2n的1~2n的全排列,保证其奇数项递增,偶数项递增,并且相邻的奇数项和偶数项,后面的偶数项大于奇数项的方案数\(mod\ p,n<=1000000, ...
- 斐波那契数列_菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。
描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和.给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少. 格式 输入格式 第1行是测 ...
- [HNOI2009] 有趣的数列
题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<...<a2n ...
- BZOJ1485: [HNOI2009]有趣的数列
题解:考虑按顺序从小到大,加入数字,将加入奇数位置看作入栈,加入偶数位置看作出栈.为什么可以?考虑我们要保证相邻奇数小于偶数,所以必须先填上一个奇数的位置才能填偶数的位置,既时刻保证奇数>=偶数 ...
- [Catalan数三连]网格有趣的数列树屋阶梯
如何让孩子爱上打表 Catalan数 Catalan数是组合数学中一个常出现在各种计数问题中的数列. 以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名. 先丢个公式(设第n项为$ ...
- Nowcoder 5477E. 弦(卡特兰数、组合数学)
题目描述: 给定一个圆,圆上有2N个互不重叠的点.每次操作随机选择两个先前未选择过的点连一条弦,共连成N条弦,求所有弦不交的概率. 输入描述: 一行,只有一个整数N(1≤N≤10^7). 输出描述: ...
最新文章
- SAP的安装后基本设定
- [转] Nexus OSS 3.xx 体验
- C++ 拷贝构造函数应用场景
- Logging with Log4net (二)
- AdvStringGrid 垂直居中 、水平居中
- EOS 共识机制 (4)出块流程
- python除号的乘法加括号_乘除法添加括号规则
- 西安电子科技大学第16届程序设计竞赛G题
- 通过OpenShift超越云技术
- linux磁盘永久挂载教程,linux 永久磁盘挂载
- 读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库
- linux下unix timestamp 与 可视化时间/常规时间进行转换
- 图片添加图片水印和文字水印
- MAC-VBox-Centos6.6安装增强功能
- python如何读取文件数据恢复_删python目录
- AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)
- beanutils.copyproperties属性值丢失_数据质量 | 脏数据?缺失值、异常值和一致性分析?...
- python将灰度图转为彩色值_python实现彩色图转换成灰度图
- 一个非常好用的插件-FeHelper
- HTML圆角+div立体阴影