Pagini recente » Cod sursa (job #2834471) | Cod sursa (job #1729196) | Cod sursa (job #1911857) | Cod sursa (job #2528170) | Cod sursa (job #2595953)
#include <stdio.h>
#include <ctype.h>
#define N 2000001
char s[N], t[N];
int pi[N];
void compute () {
int i=1, len=0;
while (isalnum(t[i])){
if (t[i]==t[len])
pi[i++]=++len;
else
if (len)
len=pi[len-1];
else
pi[i++]=0;
}
}
int main (void) {
FILE *fin=fopen ("strmatch.in", "r"),
*fout=fopen ("strmatch.out", "w");
fgets(t, sizeof t, fin);
fgets(s, sizeof s, fin);
fprintf(fout, " \n");
compute();
int i=0, j=0, ct=0;
while (isalnum(s[i]) && ct!=1000)
if (s[i]==t[j]) {
++i, ++j;
if (!isalnum(t[j])) {
++ct;
fprintf (fout, "%d ", i-j);
j=pi[j-1];
}
}
else
if (j)
j=pi[j-1];
else
++i;
fseek(fout, 0, SEEK_SET);
fprintf(fout, "%d", ct);
return 0;
}