Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # zabcd
- # abcdz
- # → 4
- # hash(abcdz) = (a * X**4 + b * X**3 + c * X**2 + d * X**1 + z * X**0) % M
- # a * X**1 + b * X**0
- # a * X**3 + b * X**2 + c * X**1 + d
- def polyhash(start, end):
- return (p[end] - p[start] * z[end - start]) % M
- s = input()
- t = input()
- n = len(s)
- text = s + t + t # zabcd abcdz abcdz
- M = 1_000_000_007
- X = 566_239
- z = [1]
- p = [0]
- for c in text:
- z.append(z[-1] * X % M)
- p.append((p[-1] * X + ord(c)) % M)
- hash_of_s = p[n] # polyhash(0, n) # Andrew's hack
- for i in range(n):
- if hash_of_s == polyhash(n + i, 2 * n + i):
- print(i)
- exit()
- print(-1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement