天天看点

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

继续阅读