Pagini recente » Cod sursa (job #188604) | Cod sursa (job #356185) | Cod sursa (job #2338795) | Cod sursa (job #1172588) | Cod sursa (job #2321026)
#include <bits/stdc++.h>
char chk[2000000];
int sp[2000000];
int af[1000];
int main()
{
int n=0,k=0,s=0,m,q=0;
char c;
FILE*fi,*fo;
fi=fopen("strmatch.in","r");
fo=fopen("strmatch.out","w");
c=fgetc(fi);
chk[0]=c;
n++;
c=fgetc(fi);
while(c!='\n' && c!=EOF){
chk[n]=c;
while(k>0 && chk[n]!=chk[k]){
k=sp[k-1];
}
if(chk[n]==chk[k]){
k++;
sp[n]=k;
}
else {
sp[n]=k;
}
n++;
c=fgetc(fi);
}
c=fgetc(fi);
k=0;
m=0;
while(c!='\n' && c!=EOF){
m++;
if(c==chk[k]){
k++;
if(k==n){
s++;
k=sp[k-1];
if(q<1000){
af[q]=m-n;
q++;
}
}
}
else {
k=sp[k-1];
}
c=fgetc(fi);
}
fprintf(fo,"%d\n",s);
for(int i=0;i<q;i++){
fprintf(fo,"%d ",af[i]);
}
fclose(fi);
fclose(fo);
return 0;
}