UOJ424 集訓隊作業2018 count

2022-05-06 19:57:11 字數 1947 閱讀 3166

將序列對應到笛卡爾樹,發現每棵笛卡爾樹只對應一種合法序列。因為在笛卡爾樹上往左走其對應的數至少減 \(1\),往右走不一定減 \(1\),所以這棵笛卡爾樹從根節點往左走的次數要 \(\leqslant m\),題目就轉化為了統計有多少棵 \(n\) 個節點的合法笛卡爾樹。

笛卡爾樹是二叉樹,因為二叉樹和括號序列都可以用卡特蘭數計數,所以笛卡爾樹能轉化為括號序列。考慮中序遍歷,每往左走就加入乙個左括號,回溯回來時加入乙個右括號,往右走時不操作,到葉子節點時加入一對完整括號,那麼其就對應到了乙個 \(2n\) 的括號序列。

設 \(s_i\) 為位置 \(i\) 之前左括號個數減右括號個數,得其需要滿足 \(\forall i \in [1,2n],0 \leqslant s_i \leqslant m\)。將其進一步轉化為網格圖上路徑計數,即從 \((0,0)\) 走到 \((n,n)\),只能向上向右走,且不能碰到直線 \(a:y=x+1,b:y=x-m-1\) 的方案數。

考慮翻摺法來容斥計數,將連續碰到一條直線看作只碰到一次,如 \(a\ a\ a\ b\ b\ a\) 看作 \(a\ b\ a\),也就是只考慮第一次碰到直線的貢獻。不合法方案形如:

\[\large\begin

&a \\

&b \\

&a\ b \\

&b\ a \\

&a\ b\ a \\

&b\ a\ b \\

&a\ b\ a\ b \\

&b\ a\ b\ a \\

&a\ b\ a\ b\ a \\

&\dots

\end

\]考慮要減去以 \(a\) 開頭的方案數,就減去以 \(a,a\ b\) 結尾的方案數,加上以 \(b\ a,b\ a\ b\) 結尾的方案數,一直這樣下去,直到方案數為 \(0\)。這一過程可以看作將終點 \((x,y)\) 沿 \(a\) 翻摺,減去從 \((0,0)\) 到終點不受限制的方案數,再沿 \(b\) 翻摺,加上從 \((0,0)\) 到終點不受限制的方案數,直到終點 \((x,y)\) 超出邊界。減去以 \(b\) 開頭的方案數同理。

\(m\) 為兩直線間的距離,得複雜度為 \(o(\frac)\)。

還有另一種做法,設 \(f_\) 為 \(i\) 個節點往左走的次數 \(\leqslant j\) 的笛卡爾樹個數,得:

\[\large f_=\sum_f_x^i\),得:

\[\large\begin

f_j(x)&=xf_(x)f_j(x)+1 \\

f_j(x)&=\frac(x)} \\

\end

\]設 \(f_j(x)=\frac\),得:

\[\large\begin

f_j(x)&=\frac(x)} \\

\frac&=\frac(x)}(x)}} \\

\frac&=\frac(x)}(x)-xa_(x)} \\

\end

\]得 \(a_j(x)=b_(x),b_(x)=b_(x)-xa_(x)\),可以用矩陣快速冪求出 \(a_m(x),b_m(x)\),這裡先用點值表示後再進行快速冪即可。

複雜度為 \(o(n \log n)\),明顯沒有第一種方法優秀。

#include#define maxn 400010

#define all 400000

#define p 998244353

using namespace std;

typedef long long ll;

templateinline void read(t &x)

while(isdigit(c))

if(flag)x=-x;

}int n,m,x,y;

ll ans;

ll fac[maxn],ifac[maxn];

ll inv(ll x)

return v;

}ll c(int n,int m)

UOJ424 集訓隊作業2018 count

先特判掉 m n 的情況。考慮先確定乙個 f 陣列,然後判定他能否生成乙個好序列。考慮先確定最靠左邊的最大值的位置,此時他大於等於後面的元素,然後嚴格大於前面的元素。不難發現這種確定方式可以固定一組 f 序列,同時,如果這張圖上的最長鏈小於等於 m 那麼這個答案就是合法的。觀察到我們其實只關心長度,...

UOJ449 集訓隊作業2018 喂鴿子

uoj 看題後 感覺自己越來越菜了,再這樣下去,要是正式考試送溫暖豈不是連溫暖都拿不到了。一臉min max反演的樣子,由於每個鴿子都等價,列舉子集大小 i ii 即可 a ns i 1n n i 1 i 1nif i ans sum n binom n i 1 frac n i f i ans i...

UOJ 449 集訓隊作業2018 喂鴿子

449.集訓隊作業2018 喂鴿子 dp好題 處理前m個,最快吃飽的鴿子期望的時間 根據期望的定義 考慮每個方案數的概率 期望次數 列舉前m個用了x個,概率都是 1 m x em x 而em x 表示往前m個扔了x個期望的總共次數,就是x n m 考慮用了x個的方案數 生成函式egf思想。而出現乙個...