8月

你说得太对辣發表於2024-08-10

8.9

CF1765H

AT_agc016_d

設當前序列的異或和為 \(x\) 並把 \(x\) 放在 \(a[n+1]\)。每操作一次即為交換 \(a[i]\)\(a[n+1]\)。這樣就能判無解了。

對於位置 \(i\),若 \(a[i] \neq b[i]\),則 \(a[i]\)\(b[i]\) 之間連一條邊,答案為連通塊數 + 邊數 - 1。

CF199F

設當前有 \(p_0\) 個 0 和 \(p_1\) 個 1,答案即為 \(\sum_{i=0}^{\frac{k+1}{2}} \binom{p_0}{i} \binom{p_1}{k-i}\)

P10785

P10654

對於每個位置 \(i\),分別處理最早/晚從這個點出發能到兩端的時間。

\(lz_i\) 表示 \(i\) 能到達 \(1\) 要出發的最早時間,\(rz_i\) 表示 \(i\) 能到達 \(1\) 出發最晚時間。

首先 \(lz_1 = 0,rz_1 = inf\),由於 \(i-1\)\(i\) 之間的邊只在 \([l_i,r_i]\) 能走,所以 \(lz_i = max(lz_{i-1},l_{i-1}), rz_i = min(rz_{i-1},r_{i-1})\)。然後還有 \(t_i\),最優的情況是在 \(t_i\) 的最後一秒向左走,所以 \(lz_i = max(l_{i-1} - t_i,0)\)

但是這個地方有細節的啊,我以為這樣就做完了於是樣例一直不過。考慮只有當 \(l_{i-1} \ge lz_{i-1}\) 的時候才能進行上面一步轉移,否則 \(t_i\) 秒結束之後無法立即向左走。

然後再倒著做一遍向右的就做完了。