Pagini recente » Borderou de evaluare (job #2109279) | Cod sursa (job #1813903) | Borderou de evaluare (job #716615) | Borderou de evaluare (job #551344) | Cod sursa (job #2651499)
f = open('strmatch.in', 'r')
g = open('strmatch.out', 'w')
def get_prefix(s):
j = 0
p = [0, 0]
for i in range(2, len(s)):
while j and s[j + 1] != s[i]:
j = p[j]
if s[j + 1] == s[i]:
j = j + 1
p.append(j)
return p
a, b = f.read().splitlines()
a = '0' + a
b = '0' + b
p = get_prefix(a)
n = 0
sol = []
j = 0
for i in range(1, len(b)):
while j and a[j + 1] != b[i]:
j = p[j]
if a[j + 1] == b[i]:
j = j + 1
if j == len(a) - 1:
n = n + 1
sol.append(i - len(a) + 1)
j = p[j]
print(n)
for num in sol:
print(num, end=' ')