ABC430 AtCoder Beginner Contest 430 游記
省流
C 題狂卡一小時,選擇跳題開出 ABDE,賽后被小朋友薄紗。
11.2
內含劇透,請vp后再來。
不是題解!!!!!!!
賽時
A 題不談。
B 題給了一個 \(10 \times 10\) 的 \(01\) 矩陣,要求把每個 \(m \times m\) 的矩陣取出來,問不同的有多少個。可以把每個矩形內部按從上到下從左到右拼接成字符串,丟到 set 里就可以了。
C 題給了一個長度為 \(n \leq 3e5\) 的僅包含 \(a\) 和 \(b\) 的字符串,問有多少個子串滿足 \(a\) 的數量大于等于 \(x\) 且 \(b\) 的數量小于 \(y\)。很容易想到雙指針,但是相當難以實現,于是考慮二分。我二分的方向是固定右端點,然后二分找到最左側滿足的和最右側滿足的左端點,然后答案取中間。但這樣的話因為只有中間一段是滿足的,并不滿足二分的條件,于是再去實現雙指針,到了六十多分鐘時仍未寫出選擇跳題。
D 題給了 \(n \leq 5e5\) 個數,按順序加入,每個數的貢獻是距離他最近的數的距離。利用 set 模擬即可,注意前后的數是否存在,以及前后的數前后是否有數。
E 題給了兩個長度相同的 \(01\) 字符串,問第一個串能不能通過左移任意次達到與第二個串相同。我直接用滾動哈希 \(O(n)\) 解決了,不知道正解是什么。通過后沒有剩余的時間了,比賽結束。
賽后
比賽一結束我就問他們的想法,然后有小朋友說 C 二分,我一開始還說 C 二分是假的,結果一說就知道了。對于一個固定的右端點,分別二分滿足 \(a\) 和滿足 \(b\) 的左端點然后取交集即可。注意初始化不能簡單的初始化為 \(0\)。
2025年11月2日

浙公網安備 33010602011771號