Pagini recente » Cod sursa (job #833135) | Cod sursa (job #2674742) | Cod sursa (job #2731706) | Cod sursa (job #2723198) | Cod sursa (job #627184)
Cod sursa(job #627184)
#include<stdio.h>
#include<string.h>
long i, j, n, L[2000001], k, nrsol, sol[1002];
char P[2000001], T[2000001];
int main()
{
freopen("strmatch.in", "rt", stdin);
freopen("strmatch.out", "wt", stdout);
scanf("%s%s", P + 1, T + 1);
L[1] = 0;
for(i = 2; i <= strlen(P + 1); i++)
{
k = L[i - 1];
while(k > 0 && P[k + 1] != P[i])
k = L[k];
if(P[k + 1] == P[i])
k++;
L[i] = k;
}
k = 0;
for(i = 1; i <= strlen(T + 1); i++)
{
while(k > 0 && P[k + 1] != T[i])
k = L[k];
if(P[k + 1] == T[i])
k++;
if(k == strlen(P + 1))
{
nrsol++;
if(nrsol <= 1000)
sol[nrsol] = i - k;
k = L[k];
}
}
printf("%ld\n", nrsol);
for(i = 1; i <= 1000; i++)
if(sol[i] != 0)
printf("%ld ", sol[i]);
printf("\n");
return 0;
}