發表文章

目前顯示的是 9月, 2018的文章

【CF 1051E】Vasya and Big Integers

原題連結: http://codeforces.com/problemset/problem/1051/E 這題大概瞪個一眼就會發現是DP了 但是問題在轉移,怎麼想都很容易TLE 總之如果列出轉移式的話,大概會長這樣  dp[i]=lsubstring(j,i]rdp[j]  那就是要想辦法搜到滿足的 j 的範圍,可以發現存在單調性,衝動之下可能就會想二分搜了 可以用hash來達成類似的動作,複雜度約為 O(nlogn)  但是hash容易被攻擊, O(nlogn) 又感覺怕怕的 有沒有一個優美又是 O(n) 的解呢? 有! 觀察字串比大小時的動作,也就是找到兩個字串的 LCP 再比較下一個字元的大小 仔細看了一下,找 LCP 的動作都是發生在字串 l,r 跟字串 a 的每個元素開始比較 那如果能預處理這些東西的 LCP ,不就能 O(1) 定位了嗎? 當然這裡絕對不會把Suffix Array搬出來 Z-value就足夠了! 把字串 a 分別接在 l,r 後面求Z-value,就完成預處理 LCP 了 那區間的DP值也只不過是做點前綴處理而已(要記得判掉前綴0,跟反處理掉單一個0的情況) 整體就完全是線性的$\color{white}{\space O(...