Pagini recente » Cod sursa (job #2967041) | Cod sursa (job #2743050) | Cod sursa (job #1400770) | Cod sursa (job #632496) | Cod sursa (job #1241347)
#include<stdio.h>
#include<string.h>
#define MAX 2000005
char A[MAX] , B[MAX];
int p[MAX] , N , M , sol , v[MAX];
int main()
{
int k , i ;
freopen("strmatch.in" , "r" , stdin );
freopen("strmatch.out" , "w" , stdout );
scanf("%s%s" , A+1 , B+1);
N = strlen(A+1);
M = strlen(B+1);
k = 0;
for(i = 2 ; i <= N ; ++i )
{
while(k && A[i] != A[k+1])k = p[k];
if(A[i] == A[k+1])
p[i] = ++k;
}
k = 0;
for( i = 1 ; i <= M ; ++i )
{
while(k && B[i] != A[k+1])k = p[k];
if(B[i] == A[k+1])
k++;
if(k == N)
{
sol++;
if(sol <= 1000)
v[sol] = i-N;
}
}
printf("%d\n" , sol );
for(i = 1 ; i <= sol && i <= 1000 ; ++i )
printf("%d " , v[i] );
return 0;
}