題面傳送門
首先你需要會 \(n=2\) 時候的貪心,這個比較簡單,直接能走就走就行了。
然後 \(n=3\) 的時候就不能能走就走了,可能在中間就拐到第三行了。但是容易發現的是我們只會在最後一個能走到第三行的位置走到第三行。我們需要找到這個位置。一個比較重要的觀察是,如果其後面匹配長度大於 \(3\),則是否能走到第三行是確定的,否則暴力即可。\(n=4\) 同樣也是類似的。
\(n\) 更大以後的路徑形態會比較複雜,不好貪心。考慮 DP,我們對於每條斜線進行 DP,記 \(f_i\) 為這條斜線在第 \(i\) 行能否匹配。
直接硬要轉移是在一個 DFA 上跑匹配,需要 DAG 鏈剖分。但是根據我們上面的觀察,記 \(f_i\) 中第一個 \(1\) 為 \(x\),則我們求出 \(x\) 往後最多能匹配到哪裡,那麼這一段的轉移是確定的,最後一個位置不確定,但是可以暴力轉移,之後 \(x\) 至少 \(+1\)。
因此對於每個詢問,我們會進行 \(n\) 輪操作,每一輪操作中需要求一次 LCP 以及一次矩陣連乘積,還有一次暴力轉移。壓位加上貓樹即可做到 \(O(L\log L+n^3m\log m+qn^2)\)。
submission