Pagini recente » Cod sursa (job #328168) | Cod sursa (job #1591244) | Cod sursa (job #484032) | Profil JohnnyBravo | Cod sursa (job #2321664)
#include <bits/stdc++.h>
char ck[2000000];
int sf[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);
ck[n]=c;
n++;
c=fgetc(fi);
while(c!='\n' && c!=EOF){
ck[n]=c;
while(k>0 && c!=ck[k]){
k=sf[k-1];
}
if(c==ck[k])
k++;
sf[n]=k;
c=fgetc(fi);
n++;
}
c=fgetc(fi);
k=0;
q=0;
while(c!='\n' && c!=EOF){
while(k>0 && c!=ck[k]){
k=sf[k-1];
}
if(c==ck[k]){
k++;
if(k==n){
k=sf[k-1];
if(s<1000)
af[s]=q;
s++;
}
}
c=fgetc(fi);
q++;
}
fprintf(fo,"%d\n",s);
for(int i=0;i<s && i<1000;i++){
fprintf(fo,"%d ",af[i]-n+1);
}
fclose(fi);
fclose(fo);
return 0;
}