Pagini recente » Cod sursa (job #1475528) | Cod sursa (job #2143839) | Cod sursa (job #2575927) | Cod sursa (job #1408059) | Cod sursa (job #1798368)
#include<stdio.h>
#include<string.h>
using namespace std;
FILE*f=fopen("strmatch.in","r");
FILE*g=fopen("strmatch.out","w");
char a[2000005],b[2000005];
int al,bl,q,i,dim,k,v[1005],um[2000005];
int main() {
fscanf(f,"%s%s",a,b);
al=strlen(a); bl=strlen(b);
um[1]=0; k=0;
for(i=2;i<=al;i++) {
while(k>0&&a[k]!=a[i-1]) k=um[k];
if(a[k]==a[i-1]) k++;
um[i]=k;
}
q=0;
for(i=0;i<bl;i++) {
while(q>0&&a[q]!=b[i]) q=um[q];
if(a[q]==b[i]) q++;
if(q==al) {
++dim;
if(dim<=1000) v[dim]=i-al+1;
}
}
fprintf(g,"%d\n",dim);
if(dim>1000) dim=1000;
for(i=1;i<=dim;i++) fprintf(g,"%d ",v[i]);
fclose(f); fclose(g);
return 0;
}