Pagini recente » Cod sursa (job #1945119) | Cod sursa (job #1908551) | Cod sursa (job #839767) | Cod sursa (job #3129922) | Cod sursa (job #1441167)
#include <bits/stdc++.h>
const long Max=2000000;
char A[Max],B[Max];
long P[Max],Sol[1000],N,M,nr = 0;
void Prefix()
{
long p = 0;
P[1] = 0;
for (long i = 2;i <= N; i++)
{
while (p && A[p+1] != A[i])
p = P[p];
if (A[p+1] == A[i]) p++;
P[i] = p;
}
}
void Read()
{
freopen("strmatch.in","r",stdin);
scanf("%s",A+1);
scanf("%s",B+1);
N = strlen(A+1);
M = strlen(B+1);
}
void Write()
{
freopen("strmatch.out","w",stdout);
printf("%d\n",nr);
if (nr > 1000) nr = 1000;
for (long i = 1;i <= nr; i++) printf("%d ",Sol[i]);
}
int main()
{
long i,p = 0;
Read();
Prefix();
for (i = 1;i <= M; i++)
{
while (p && A[p+1] != B[i])
p = P[p];
if (A[p+1] == B[i])
p++;
if (p == N)
{
p = P[N];
nr++;
if (nr <= 1000)
Sol[nr] = i-N;
}
}
Write();
return 0;
}