Cod sursa(job #538089)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 20 februarie 2011 20:16:42
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<fstream.h>
#include<string.h>
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char a[2000002], b[2000002];
int nr,p,na,nb,l[2000002],poz[1002],i,j;
int main()
{

f>>a>>b;na=strlen(a);nb=strlen(b);
     

             
for(i=na;i>0;i--) a[i]=a[i-1];a[0]=' ';
for(i=nb;i>0;i--) b[i]=b[i-1];b[0]=' ';
for(i=2; i<=na; i++)
	{
		while(j>0 && a[i]!=a[j+1])j=l[j];
		if(a[i]==a[j+1])j++;
		l[i]=j;
	}


j=0;
for(i=1;i<=nb;i++)
{ while(j>0 && b[i]!=a[j+1]) j=l[j];
  if(b[i]==a[j+1]) j++;
  if(j==na)
	  {j=l[na];
       nr++;
	   if(nr<=1000)poz[nr]=i-na;
	  }
}


g<<nr<<'\n';
if(nr>1000) nr=1000;
for(i=1;i<=nr;i++) g<<poz[i]<<' ';
g<<'\n';
	f.close(); g.close();
	return 0;
}