天天看點

codeforces MUH and Cube Walls

題意:給定兩個序列a ,b, 如果在a中存在一段連續的序列使得

a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k

就說b串在a串中出現過!最後輸出b串在a串中出現幾次!

思路: KMP變形!如何轉換成KMP求解呢?

舉一個例子說明一下:

a: 5 10 8 10 11 9 11 12 10 15

b: 4 2 4 5 3

根據題意 a中的 10 8 10 11 9 與 b是比對的, 11 9 11 12 10跟b也是比對的!

如何将b串以及 10 8 10 11 9, 以及 11 9 11 12 10轉換成同一個串?這樣好套用kmp啊!

因為對應的數值的內插補點都是相同的! 令a[i]-=a[i+1], b[i]-=b[i+1]!

這樣也就是将串的長度減少了1,這樣就可以套kmp模闆了!

别忘記對特殊情況考慮一下!

codeforces MUH and Cube Walls
codeforces MUH and Cube Walls

View Code

繼續閱讀