10月份模擬賽總結

鳶一折紙發表於2024-10-03

2024.10.3:

能夠感受到出題人深深的惡意,扔了道 zak 沒場切的互動,甚至 2e5 的輸出關同步流被卡了。

A:

一共只有 $ 25 n $ 種本質不同的操作,不妨求出每種操作後的新串的平方子串個數,最後取其中最大值即可。 跨過它們的平方子串(包括修改後新生成的)的貢獻。

記 $ L=\min (L C S(a, b) ,len ), R=\min (L C P(a+1, b+1) ,len -1 ) $ ,貢獻為 $ \max (0, L+R-k+1) $ 。

至於有修改的情況,不妨先考慮每種修改對 $ L, R $ 分別造成了什麼影響。下以 $ R $ 為例說明,設修改了第 $ i $ 個點:

$ i \in[1, a]: R $ 保持不變;

$ i \in[a+1, a+R], R $ 變為 $ i-(a+1) $ 。

$ i=a+R+1 $ :若將 $ s_{a+R+1} $ 修改為 $ s_{b+R+1} , R $ 變為 $ R+1+L C P(a+R+2, b+R+2) $ ;否則,仍為 $ R $ 。

$ \max (0, L+R-k+1) $ 取哪一邊,可以得到更細緻的分類,每一類中的貢獻都是一個關於 $ i $ 的一次函式。

於是只要對貢獻陣列做 $ O(1) $ 次區間加一次函式即可,差分即可。

B:

官解:

考慮三角剖分的對偶圖 (去掉外部無限大的面對應的那個點) ,可以發現該對偶圖構成一棵樹。

並且,若以原圖中邊 $ (1, n) $ 所在的三角形為樹的根,則其是一棵有根二叉樹。

我們不妨將其視為一棵二叉搜尋樹。

在此建模中,可以發現,題面中的一次操作對二叉樹形態的影響,相當於二叉樹中的一次左旋/右旋操作。

同時,注意到點 $ x $ 為題面中的"關鍵點",等價於二叉樹的根的左子樹大小為 $ x-2 $ 。

於是,若要使 $ x $ 成為關鍵點,只要將中序遍歷中第 $ x-1 $ 個點透過旋轉操作轉到根即可。

這可以使用 splay 做到均攤 $ O((n+m) \log n) $ 次旋轉操作,足以透過本題。

C:

考慮一個長為 $ n-1 $ 的排列插入 $ n $ ,有 $ n $ 種方式,且其對逆序對數的影響恰分別為 $ +0,+1,+2, \ldots,+(n-1) $ 。

使用生成函式,得到長為 $ n $ ,逆序對數為 $ m $ 的排列數為:

\[\left[x^{m}\right] \prod_{i=1}^{n} \frac{1-x^{i}}{1-x}=\left[x^{m}\right] \frac{\prod_{i=1}^{n}\left(1-x^{i}\right)}{(1-x)^{n}} \]

由於 $ m \leq n $ ,所以 \(\prod_{i=1}^{n}\left(1-x^{i}\right) \equiv \prod_{i=1}^{\infty}\left(1-x^{i}\right)\left(\bmod x^{m+1}\right)\)

考慮五邊形數定理(這輩子沒想到會用這個):

\[F(x)=\prod_{i=1}^{\infty}\left(1-x^{i}\right)=1+\sum_{i=1}^{\infty}(-1)^{i} x^{\frac{i(3 i+1)}{2}} \]

於是答案轉化為 $ \left[x^{m}\right] \frac{F(x)}{(1-x)^{n}} $ 。

由於 $ F $ 在前 $ m $ 項中只有 $ O(\sqrt{m}) $ 項是非 0 的,可以做到 $ O(\sqrt{m}) $ 求解單次詢問的答案,總時間複雜度 $ O(n+T \sqrt{m}) $ 。