Pagini recente » Cod sursa (job #2002317) | Cod sursa (job #214540) | Cod sursa (job #419214) | Cod sursa (job #288544) | Cod sursa (job #420764)
Cod sursa(job #420764)
#include <cstdio>
#include <cstring>
#define DIM 2000005
char A[DIM], B[DIM];
int b[DIM], sol[1024], nrsol, n, m;
void kmpPreprocess()
{
b[0] = -1;
for (int i = 0, j = -1; i < m; ++i, ++j, b[i] = j)
while(j > -1 && A[i] != A[j])
j = b[j];
}
void kmpSearch()
{
for (int i = 0, q = -1; i < m; ++i)
{
while (q > -1 && A[q+1] != B[i])
q = b[q];
if (A[q+1] == B[i])
++q;
if (q == n)
{
++nrsol;
sol[nrsol] = i-n+1;
}
}
}
int main()
{
FILE *f = fopen("strmatch.in", "r");
fscanf(f,"%s%s", A, B);
fclose(f);
n = strlen(B);
m = strlen(A);
kmpPreprocess();
kmpSearch();
f = fopen("strmatch.out", "w");
fprintf(f, "%d\n", nrsol);
nrsol=(nrsol>1000)?1000:nrsol;
for (int i = 1; i <= nrsol; ++i)
fprintf(f, "%d ", sol[i]);
fclose(f);
return 0;
}