有趣的数列 bzoj-1485 HNOI-2009

题目大意:求所有1~2n的排列满足奇数项递增,偶数项递增。相邻奇数项大于偶数项的序列个数%P。

注释:$1\le n\le 10^6$,$1\le P \le 10^9$。


想法:好题啊。

我们依次考虑1~2n,就是把当前$i$放进奇数项还是偶数项的问题。因为我们有相邻奇数项大于偶数项的问题。所以当前放进奇数项的个数不能多于放进偶数项的个数。

进而我们将放进奇数项比作进栈,放进偶数项比作出栈。

答案就相当于$n$的出栈入栈序的个数。

等于$Catalan_n$。

利用卡特兰数的通项公式:$Catalan_n=\frac{C_{2n}^{n}}{(n+1)}$。

$=\frac{(2n)!}{n!(n+1)!}$。

用枚举质因子的方式求每个质因子的贡献即可。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll mod;
bool vis[2000010];
int prime[2000010],cnt;
ll qmul(ll x,ll y)
{
ll ans=0; x%=mod,y%=mod; while(y)
{
if(y&1) (ans+=x)%=mod;
y>>=1;
(x+=x)%=mod;
}
return ans;
}
ll qpow(ll x,ll y)
{
ll ans=1; x%=mod; while(y)
{
if(y&1) (ans*=x)%=mod;
y>>=1;
(x*=x)%=mod;
}
return ans;
}
void init()
{
for(int i=2;i<=2000000;i++)
{
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt&&1ll*i*prime[j]<=2000000;j++)
{
vis[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
}
ll num(ll x,ll p)
{
ll re=0; while(x)
{
re+=(x/p); x/=p;
}
return re;
}
int main()
{
init();
ll n; cin >> n >> mod ;
ll ans=1;
for(int i=1;i<=cnt&&prime[i]<=n*2;i++)
{
ans=qmul(ans,qpow(prime[i],num(2*n,prime[i])-num(n,prime[i])-num(n+1,prime[i])));
}
cout << ans << endl ;
return 0;
}

小结:好题啊。关于模型的转化总是非常重要且巧妙的。

最新文章

  1. 普元部署多个应用的方法(适用EOS6.5以上版本,且无需governor中添加应用)
  2. 第1章 JavaScript概述
  3. gradle 如何操作命令行
  4. vim常用指令及快捷键(持续更新)
  5. Sed文本替换一例
  6. 2016021902 - linux解压缩命令
  7. Android 图标上面添加提醒(一)使用Canvas绘制
  8. 【IACV】边缘检测技术传统的方法与理论
  9. 三种工厂模式的分析以及C++实现
  10. [SQL基础教程] 4-1 数据的插入(INSERT)
  11. 谈谈我的session跨域处理方法
  12. Linux进行AES加密每次结果都不一致并且解密失败报错
  13. 西瓜视频蓝光1080P下载方法
  14. Missile Command 导弹指令
  15. Android开发 - 掌握ConstraintLayout(八)障碍线(Barrier)
  16. 多线程Thread类的方法
  17. shiro实战系列(十五)之Spring集成Shiro
  18. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
  19. java 使用正则判断是不是一个数字
  20. web 项目手机页面不允许缩放

热门文章

  1. Angular jsonp 同源策略的问题
  2. 对openjdk的javac编译器扩展了一个语法糖
  3. Objective - c Chapter 1 -2 Hello world
  4. Boost库编译安装
  5. Javascript IE 内存释放
  6. JS性能分析(测试代码运行时间)
  7. Linux——网络编程线程池机制
  8. [bzoj4816][Sdoi2017]数字表格 (反演+逆元)
  9. 第2节 hive基本操作:6、7、8
  10. 字符串匹配算法之BM算法