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\) 秒結束之後無法立即向左走。
然後再倒著做一遍向右的就做完了。