十月太擺了沒有隨便做做環節。
測試題目選集
20241106 - D. 盼君勿忘
題解等會寫 qwq。
Miscellaneous
[AGC022D] Shopping
神秘題目,比較酷。
首先發現對於 \(t_i\ge2L\) 的 \(t_i\) 可以直接將 \(t_i\lfloor\frac{t_i}{2L}\rfloor\) 加入答案並將 \(t_i\) 對 \(2L\) 取模。然後只考慮 \(t_i \ne 0\) 的 \(i\)。
考慮如何最佳化這個策略。首先簡化操作,如果從一個點出來之後往某個方向走到最邊上之後折返回來經過這個點,那麼選擇在後面上車。因此得到了好像更簡單的操作序列。之後在操作序列中將花 \(2L\) 時間的點去掉之後,會發現每次從一個點出來一定會改變方向,這個序列(如果存在的話)一定是第一次會往左走時進,往右走時出,最後一次和第一次的方向一定相反,這個序列長度為偶數,貢獻為長度除以 \(2\) 乘以 \(2L\),因為實際上是第 \(2i-1\) 個和第 \(2i\) 個配對最佳化一個 \(2L\)。這啟發出了更進一步,將(可以左走變右走的點)和(可以右走變左走的點)進行儘量多的配對,因為每個配對可以最佳化一個 \(2L\)。似乎是一個很難的問題。
這時構建一種思路,對於每個 \(i\),直接花 \(2L\) 的時間走,這樣時間就是 \(2L\cdot (n + 1)\) 的。之後對於剩餘的每個非 \(0\) 的位置,記 \(l_i= [2x_i\ge t_i]\) 表示車下了人之後往左走再回來是否可以直接接上,\(r_i\) 同理。\(l_i=1\) 說明可以右走變左走,\(r_i\) 同理。實際上我們就是找 \(i<j,l_i=r_j=1\),最大的不交 \((i,j)\) 對數,因為透過一些思考得到對於 \(\{(i,j)\}\) 一定存在 \(|\{(i,j)\}|=|\{(i',j')\}|\) 的 \(\{(i',j')\}\) 可以拼出一個順次的操作序列。
考慮觀察性質:
-
\(l_i=r_i=0\) 時,無法最佳化。
-
\(l_i=1,r_i=0\) 時,\(2x_i\ge t_i > 2L - 2x_i\),得到 \(x_i\ge L/2\)。
-
\(l_i=0,r_i=1\) 時,同理可得 \(x_i\le L/2\)。
-
\(l_i=r_i=1\),可以隨便匹配。
於是發現 \(l_i+r_i=1\) 的匹配一定是和 \(l_j=r_j=1\) 的合併,而 \(l_i=r_i=1\) 的也可以自己合併,於是分開貪心匹配就可以了。
有個小細節是,\(n\) 一定存在一種最優操作序列使得它不會被匹配,此時 \(r_i=1\) 還可以額外少一次 \(2L\)。
Submission #59511721 - AtCoder Grand Contest 022