Pagini recente » Cod sursa (job #1801375) | Cod sursa (job #1835883) | Istoria paginii runda/simulare-cartita-17 | Cod sursa (job #1566111) | Cod sursa (job #444600)
Cod sursa(job #444600)
#include <stdio.h>
#include <string.h>
FILE *f=fopen("strmatch.in","r"),*g=fopen("strmatch.out","w");
char a[2000005],b[2000005];
int k,i,n,m,pr[2000005],poz[1024];
int main(void)
{
fgets(a,2000004,f);
fgets(b,2000004,f);
n=strlen(a)-2;
m=strlen(b)-2;
k=-1;
pr[0]=-1;
for (i=1;i<=n;i++)
{
while (k>-1 && a[k+1]!=a[i])
k=pr[k];
if (a[k+1]==a[i])
k++;
pr[i]=k;
}
k=-1;
for (i=0;i<=m;i++)
{
while (k>-1 && a[k+1]!=b[i])
k=pr[k];
if (a[k+1]==b[i])
k++;
if (k==n)
poz[++poz[0]]=i-n;
if (poz[0]==1000) break;
}
fprintf(g,"%d\n",poz[0]);
for (i=1;i<=poz[0];i++)
fprintf(g,"%d ",poz[i]);
fprintf(g,"\n");
fclose(g);
return 0;
}