Day 1
A.特工
若兩個特工 \(i,j\) 成功匹配,當且僅當 \(x_i+y_j=x_j+y_i\),移項可得 \(x_i-y_i=x_j-y_j\),所以只需要用一個 map
存一下每個值的數量,統計即可。
B.提克塔可頭
考慮遊戲的局面不會很多,最多隻有 \(3^9\) 種情況,且這些情況組成了一個 DAG。我們爆搜所有程序(共有 \(9!\) 種),建圖。建圖後拓撲排序即可預處理出所有的答案。
C.相似的回憶
考慮維護 \(pre\) 陣列,\(pre_i\) 表示上一個和第 \(i\) 個位置的字元相同的位置,特別地,若該字元是第一次出現就賦值為 \(0\)。不難發現,若兩個陣列匹配,那麼這兩個陣列的 \(pre\) 陣列一定相同。
所以維護 \(a,b\) 陣列的 hash 值,每次對於一個長度為 \(|b|\) 的 \(a\) 的子串判斷和 \(b\) 的 hash 值是否相同即可。注意需要動態維護 \(a\) 的 hash 值,所以要用線段樹來進行單點修改的操作。