国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

bzoj 1485: [HNOI2009]有趣的數(shù)列 卡特蘭數(shù)

2019-11-06 06:07:28
字體:
供稿:網(wǎng)友

題意

我們稱一個長度為2n的數(shù)列是有趣的,當(dāng)且僅當(dāng)該數(shù)列滿足以下三個條件: (1)它是從1到2n共2n個整數(shù)的一個排列ai; (2)所有的奇數(shù)項滿足a1<a3<…<a2n?1,所有的偶數(shù)項滿足a2<a4<…<a2n; n≤1000000,P≤1000000000。

分析

這么菜的題我都沒有想到。。。一頭撞死算了。 考慮每次都找最前的奇數(shù)位或最前的偶數(shù)位來放數(shù)字,但有第三個限制所以任意時刻偶數(shù)位不能多于奇數(shù)位,于是問題就變成了卡特蘭數(shù)。 直接線性篩分解質(zhì)因數(shù)即可。

代碼

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define N 2000005#define LL long longusing namespace std;int n,p,not_PRime[N],prime[N],tot,low[N],s[N];void get_prime(int n){ for (int i=2;i<=n;i++) { if (!not_prime[i]) { prime[++tot]=i;low[i]=i; } for (int j=1;j<=tot&&prime[j]*i<=n;j++) { not_prime[prime[j]*i]=1; low[i*prime[j]]=prime[j]; if (i%prime[j]==0) break; } }}void solve(int x,int y){ while (x>1) { s[low[x]]+=y; x/=low[x]; }}int main(){ scanf("%d%d",&n,&p); get_prime(n*2); for (int i=1;i<=n;i++) solve(i,-1); for (int i=n+2;i<=n*2;i++) solve(i,1); int ans=1; for (int i=2;i<=n*2;i++) for (int j=1;j<=s[i];j++) ans=(LL)ans*i%p; printf("%d",ans); return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 中山市| 伊春市| 富宁县| 独山县| 平定县| 昌平区| 金平| 吴堡县| 老河口市| 夏津县| 读书| 军事| 张家界市| 唐海县| 青田县| 安阳县| 新泰市| 横峰县| 太仓市| 肥乡县| 安陆市| 驻马店市| 宿迁市| 林周县| 醴陵市| 长子县| 藁城市| 合水县| 丰原市| 长汀县| 南召县| 黔西| 深圳市| 永修县| 苏尼特右旗| 霍邱县| 法库县| 中卫市| 台州市| 六枝特区| 明星|