2.14 Luminous Memory ——ARC125~127

LarsWerner發表於2024-03-26

今天是情人節。所以我想把今天的冠名留給最可愛的白洲梓醬。也祝各位小情侶節日快樂捏!

ARC125

ARC125D Unique Subsequence

首先我們發現對於不符合的情況,一定存在一處 x->y->z 滿足存在 y0 使得 x->y0->z 且 \(a_y=a_{y_0}\)。於是我們只需要避免這種情況就行。考慮 DP。然後令 \(t_i\) 表示 \(a_i\) 上一次出現位置,那麼 \(f_i\) 可以從滿足 \(j\ge t_i\)\(t_{a_j}=j\) 的位置轉移過來。用一個 BIT 維護轉移即可。

ARC125E Snack

這種很流的問題,可以轉化為最小割之後再貪心。

考慮直接建二分圖網路流模型,然後轉化為最小割。列舉有多少個 snack 與匯直接相連,設其為 \(x\),那麼此時的最小割即最小的 \(n-x\)\(a_i\) 之和,再加上 \(\sum_i \min(c_i,b_ix)\)。這個就很容易求解了。

ARC125F Tree Degree Subset Sum

首先考慮樹的 deg 有什麼性質:\(\sum d=O(n)\),且 \(1\) 的個數 \(\ge \max d_i\)。根據前面一個性質得知不同的 \(d\)\(O(\sqrt n)\) 種。這種問個數的問題不是很好處理,所以找是否存在一些連續性。根據後面那個性質,我們可以發現取 \(d'_i=d_i-1\) 那麼對於每一種 \(\sum d\),合法的 \(x\) (子集大小)連續。於是我們就 DP 這個 \(x\) 的最大與最小值,用多重揹包的單調佇列最佳化即可 \(O(n\sqrt n)\)

ARC126

ARC126D Pure Straight

考慮狀壓 DP。\(f_{i,s}\) 表示考慮 \([1,i]\),拼湊出集合 \(s\)\(s\) 內有序,並且考慮到後續 \(U\setminus s\) 的貢獻的方案數。那麼 \(f_{i-1,s}+\min(|s|,k-|s|)\to f_{i,s}\),並且預處理出 \(p_{s,i}\) 表示 \(i\)\(t\) 中的 rank,那麼有 \(f_{i-1,s\setminus \{a_i\}}+|s|-p_{s,a_i}\to f_{i,s}\)

ARC126E Infinite Operations

透過模擬十幾個樣例發現答案就是 \(\frac{1}{2}\sum_{a_i<a_j} a_j-a_i\)。於是用平衡樹維護序列即可。

F 是一個比較抽象的數學題。就不做了。

ARC127

ARC127D Sum of Min of Xor

考慮從高位往低位。令 \(W(h,S,T)\) 表示處理目前位為 \(h\),求解 \(a_{x \in S}\oplus a_{y\in T}\),且比 \(h\) 高的位滿足 \(a_x\oplus a_y=b_x\oplus b_y\)。於是我們按位考慮。令 \(S_0\) 表示 \(a_{x,h}=b_{x,h}\) 的集合,\(S_1,T_0,T_1\) 同理。那麼對於 \(S_0\oplus T_0\)\(S_1\oplus T_1\) 的貢獻,我們遞迴下去(\(W(h-1,S_i,T_i)\)),而對於 \(S_{0}\oplus T_{1}\)\(S_1\oplus T_0\),應該取 \(a\) 還是 \(b\) 已經確定了,直接計算答案。仔細分析一下可知總複雜度為 \(O(nw)\)

ARC127E Priority Queue

考慮我們在確定了最終狀態後如何貪心確定 push 的順序。容易發現我們一定是從小往大 push,於是 push 和 pop 操作應該會形成一些括號匹配。於是我們就能知道每個 pop 操作 pop 出的值的上限,設為 \(b\)。於是我們將 \(b\) 排序之後,\(f(i,j)\) 表示考慮 \([1,i]\) 中有 \(j\) 個數被 pop 了。轉移是容易的。

ARC127F ±AB

本篇最厲害的題。首先如果 \(a+b\le m+1\) 那麼的確啥都可以取。所以只需要考慮 \(a+b>m+1\) 的情況。然後我們發現在這種情況下,我們第一次操作完,每次只有一種操作。即如果第一次取 +a 或 -b(兩種不可能同時能操作),那麼第二次就只能取 -b 或者 +a,且這兩種肯定不能同時取。於是一共只有兩種本質不同的方案。以第一步取 +a 為例子,那麼之後的操作如果成環了那麼就一定與 \(a+b>m+1\) 矛盾。同時兩種取法路徑也不可能有交,否則同樣會成環。於是我們只需要求出能走多少步即可。一開始 \(v\) 要先對 \(a\) 取模。

然後比如我們第一步取 \(+a\)。那麼首先讓 \(v\)\(b\) 取模,並且於是我們令 \(+a\) 的次數為 \(x\),那麼得到 \(-b\) 的次數為 \(\lfloor\frac{v+xa}{b}\rfloor\)。於是我們要找到最小的 \(x\) 使得得到的數 \((v+xa)\%b\ge m+1-a\)。仔細分析一下,實際上滿足要求的 \((v+xa)\%b=v\%b+xa\%b\),否則 \(-b\) 後就能繼續 \(+a\)。所以實際上我們即想要求出最小的 \(x\) 使得 \(xa\%b\in[L,R]\)。考慮 \(xa\%b\ge y\) 等價於 \(\lfloor\frac{xa+b-y}{b}\rfloor=\lfloor\frac{xa}{b}\rfloor+1\)。於是我們二分這個 \(x\),然後類歐計算即可。

相關文章