Pagini recente » Cod sursa (job #2144791) | Cod sursa (job #782849) | Cod sursa (job #687092) | Cod sursa (job #197331) | Cod sursa (job #249414)
Cod sursa(job #249414)
#include<stdio.h>
#include<string.h>
long long int n,m,nr,sol[1011],i,q,j,pi[2000111];
char a[2000111],b[2000111];
int main(){
FILE *f=fopen("strmatch.in","r");
fscanf(f,"%s %s",a+1,b+1);
fclose(f);
n=strlen(a+1);
m=strlen(b+1);
q=0;
for(i=2;i<=n;++i)
{while((q>0)&&(a[q+1]!=a[i]))
q=pi[q];
if(a[q+1]==a[i])q++;
pi[i]=q;
}
q=0;
for(i=1;i<=m;++i)
{while((q>0)&&(a[q+1]!=b[i]))
q=pi[q];
if(a[q+1]==b[i])
q++;
if(q==n)
{nr++;
if(nr<=1000)
sol[nr]=i-n;}
}
FILE *g=fopen("strmatch.out","w");
fprintf(g,"%lld\n",nr);
for(i=1;i<=nr&&i<=1000;i++)
fprintf(g,"%lld ",sol[i]);
fclose(g);
return 0;}