BZOJ1485 HNOI2009 有趣的數列

2022-08-01 17:54:14 字數 771 閱讀 6831

題解:考慮按順序從小到大,加入數字,將加入奇數字置看作入棧,加入偶數字置看作出棧。為什麼可以?考慮我們要保證相鄰奇數小於偶數,所以必須先填上乙個奇數的位置才能填偶數的位置,既時刻保證奇數》=偶數,最終奇數等於偶數。觀察到這個性質,我們應該聯想到卡特蘭數了,套用公式求解。本題模數可能為合數,不一定存在逆元!!所以,要分解開計算,最後合併起來。順便試了下常數優化。。。然而本人**太醜,怕是救不回來了。

#include typedef unsigned long long ull;

using namespace std;

int notp[2000007],num[2000007],nxt[2000007],n,p,p[2000007],tn;

void init()

}}inline void add(ull a,ull v)

}inline ull q_pow(ull a,int b)

return (int)ans;

}inline ull merge()

for(;i<=p[0];++i) ans = (ans%p*q_pow(p[i],num[p[i]])%p)%p;

return ans%p;

}inline void write(ull x)

// (while) better than (for)

// (!=) better than (>)

// (int) better than (ull) better than (ll)

int main()

BZOJ 1485 HNOI2009 有趣的數列

bzoj 1485 hnoi2009 有趣的數列 卡特蘭數 我們稱乙個長度為2n的數列是有趣的,當且僅當該數列滿足以下三個條件 1 它是從1到2n共2n個整數的乙個排列 2 所有的奇數項滿足a1 3 2n 1,所有的偶數項滿足a2 4 2n 3 任意相鄰的兩項a2i 1與a2i 1 i n 滿足奇數...

bzoj1485 HNOI2009 有趣的數列

思路 首先限制數很多,逐步來考慮,限制一很容易滿足,考慮限制二,也就是讓奇數字和偶數字上的數遞增,限制三就是讓奇數字上的數小於奇數字加一對應的偶數字上的數,那麼我們可以把形成序列的過程看成加數的過程,從小到大逐步加 這顯然滿足限制一 然後加數的條件一是從小到大依次放奇數字或偶數字,因此也滿足限制二,...

狡猾的商人 bzoj1202,HNOI2005

ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...