bzoj 1485: [HNOI2009]有趣的數列 卡特蘭數
題意
分析
這麼菜的題我都沒有想到。。。一頭撞死算了。
考慮每次都找最前的奇數位或最前的偶數位來放數字,但有第三個限制所以任意時刻偶數位不能多於奇數位,於是問題就變成了卡特蘭數。
直接線性篩分解質因數即可。
程式碼
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define N 2000005
#define LL long long
using 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;
}
相關推薦
BZOJ 1485: [HNOI2009]有趣的數列(卡特蘭數)
傳送門 解題思路 因為總共是一個排列,那麼確定了奇數項是哪些,偶數項就確定了。怎麼判斷奇數項是否合法呢,其實由於第三個限制,可以把這個數列看成一個括號序列,奇數項為\((\),偶數項為\()\),那麼合法方案數自然是卡特蘭數了。。模數不是質數,而且\(n^2\)會超時,就只能用\(ans=\frac{
bzoj 1485: [HNOI2009]有趣的數列 卡特蘭數
題意 我們稱一個長度為2n的數列是有趣的,當且僅當該數列滿足以下三個條件: (1)它是從1到2n共2n個整數的一個排列ai; (2)所有的奇數項滿足a1<a3<…<a2n−1,
bzoj1485: [HNOI2009]有趣的數列 卡特蘭數
50%的dp應該很好想。一看題解是卡特蘭數,我就震驚了。 我們來思考為什麼是卡特蘭數。。。 每個數只能走一次,設奇數位的為x 偶數位的為y 那麼到達(N,N)一直不能穿過直線y=x 由於路徑只能往右和往上走,所以這就是個卡特蘭數。 如果還不清楚,那麼可以理解為如果向上到(a
bzoj 1485: [HNOI2009]有趣的數列 (卡特蘭數)
1485: [HNOI2009]有趣的數列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1226 Solved: 652 [Submit][St
BZOJ 1485 [HNOI2009]有趣的數列【卡特蘭大數任意模】
模數可以去任意值。 做法原理就是把數分解分解。 當然可以當作板子來記: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #inclu
「BZOJ1485」[HNOI2009] 有趣的數列 卡特蘭數列
alt class ++ use 要求 現在 前三 inpu space 「BZOJ1485」[HNOI2009] 有趣的數列 Description 我們稱一個長度為2n的數列是有趣的,當且僅當該數列滿足以下三個條件: (1)它是從1到2n共2n個整數的一
[bzoj1485][HNOI2009]有趣的數列_卡特蘭數_組合數
有趣的數列 bzoj-1485 HNOI-2009 題目大意:求所有1~2n的排列滿足奇數項遞增,偶數項遞增。相鄰奇數項大於偶數項的序列個數%P。 註釋:$1\le n\le 10^6$,$1\le P \le 10^9$。 想法:好題啊。 我們依次考慮1~2n,就是把當前$i$放進奇數項還是偶數
bzoj 1485 卡特蘭數
連結:戳這裡 1485: [HNOI2009]有趣的數列 Time Limit: 10 Sec Memory Limit: 64 MB [Submit][Status][Discuss] Description 我們稱一個長度為2n的數列是有趣的,當且僅當該數列
BZOJ 1485 [HNOI2009]有趣的數列
首先將2n個數排列為序列A,從前向後選出n個作為奇數項,剩下的作為偶數項,而且選定的陣列成的有趣的數列只能有一種(選出的奇數項數字和偶數項數字要升序插入數列,排列只有一種)。要保證奇數項小於偶數項,那麼對於每一位A中的數,其前選出的奇數項的個數必然要大於等於
【BZOJ 2822】[AHOI2012]樹屋階梯 卡特蘭數+高精
div cnblogs operator line code clu while pan .... 這道題隨便弄幾個數就發現是卡特蘭數然而為什麽是呢? 我們發現我們在增加一列時,如果這一個東西(那一列)他就一格,那麽就是上一次的方案數,並沒有任何改變,他占滿了也是,然後他
【算法專題】卡特蘭數(計數數列)
n-1 映射 點分治 blog -s 方法 .org div n-k Catalan數列:1 1 1 2 5 14 42 132 429 1430 4862 16796 【計數映射思想】 參考:卡特蘭數 — 計數的映射方法的偉大勝利 計數映射:將難以統計的數映射為另一種形式
超級卡特蘭數(bzoj 4706: B君的多邊形)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 159 Solved: 92 [Submit][Status][Discuss] Descrip
ACM常用數列(斐波那契數列、卡特蘭數、貝爾數、斯特靈數)
斐波那契數列:任意一個數是其前兩位數只和,即f(i)=f(i-1)+f(i-2),f(1)=f(2)=1 該數列也滿足黃金分割比例,所以又成為黃金分割數列 相關題目連結:Fibbonacci Number #include<stdio.h> int m
(轉載)Catalan數——卡特蘭數
出現 註意 城市 ads 大於 編號 只有一個 導致 一個點 Catalan數——卡特蘭數 今天阿裏淘寶筆試中碰到兩道組合數學題,感覺非常親切,但是筆試中失蹤推導不出來後來查了下,原來是Catalan數。悲劇啊,現在整理一下一、Catalan數的定義令h(1)=1,Cata
卡特蘭數
ini bits clas cnblogs 操作 div esp class 序列 卡特蘭數是組合數學 常見的數列 主要有4中形式: 1: h(n)= C 2n n /(n+1) 2: h(n)= C 2n n - C 2n n-1 3: h(n)= h(n
HDU 1133 Buy the Ticket 卡特蘭數
i++ ava () pos str mat bre == ann 設50元的人為+1 100元的人為-1 滿足前隨意k個人的和大於等於0 卡特蘭數 C(n+m, m)-C(n+m, m+1)*n!*m! import java.math.*; import java
HDU 1134 Game of Connections(卡特蘭數)
cut res ras sam eof cpp ont des tel 題目代號:HDU 1134 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 200
bzoj2822[AHOI2012]樹屋階梯(卡特蘭數)
n+1 amp nbsp put mat pan cat limit 一個 2822: [AHOI2012]樹屋階梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 879 Solved: 513[Submit][Sta
【專題】計數問題(排列組合,容斥原理,卡特蘭數)
spl 狀態 ans 補集 方便 常用 括號 inf 不存在 ---下面都是學習的筆記,還沒有整理,比較淩亂,有需自取吧。--- 【排列組合】 <加法原理>做一件事情有n個方法,第i個方法有pi種方案,則一共有p1+p2+...+pn種方案。 <乘法原理&
卡特蘭數相關問題
計數問題 steps str 多少 gin svg tex day src 一、什麽是Catalan數 說到Catalan數,就不得不提及Catalan序列,Catalan序列是一個整數序列,其通項公式是 遞推公式是 C(n) = C(1)*C(n-1) + C(