Pagini recente » Cod sursa (job #3168087) | Cod sursa (job #1792093) | Cod sursa (job #686097) | Cod sursa (job #2730931) | Cod sursa (job #177953)
Cod sursa(job #177953)
#include <stdio.h>
#include <string.h>
#define NX 2000010
char P[ NX ], T[ NX ];
int lP, lT, N, pi[ NX ], sol[ 1024 ];
void cit() {
P[0] = T[0] = ' ';
fgets( P + 1, NX, stdin );
lP = strlen( P+1 ) - 1;
fgets( T + 1, NX, stdin );
lT = strlen( T+1 ) - 1;
}
int i, k;
void rez() {
// int i, k;
for( pi[0] = k = -1, i = 1; i <= lP; pi[i++] = ++k )
while( P[i] != P[k+1] && k > -1 )
k = pi[k];
for( i = 1, k = 0; i <= lT; i++ ) {
while( T[i] != P[k+1] && k > -1 )
k = pi[k];
if( ++k == lP ) {
N++;
if( N <= 1000 )
sol[ N ] = i - k;
}
}
}
void scr() {
int i;
printf( "%d\n", N );
for( i = 1; i <= N && i <= 1000; i++ )
printf( "%d ", sol[ i ] );
}
int main() {
freopen( "strmatch.in", "r", stdin );
freopen( "strmatch.out", "w", stdout );
cit();
rez();
scr();
return 0;
}