Cod sursa(job #576870)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 9 aprilie 2011 16:29:42
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
using namespace std;
#include<fstream>
char a[2000100],b[2000100];
int pi[2000100],sol[1010];
int main()
{int n,m,i,q,nr=0;
ifstream in("strmatch.in");
in.getline(a,2000000);
in.getline(b,2000000);
in.close();
n=strlen(a);
m=strlen(b);
for(i=n;i>0;a[i]=a[i-1],i--);
for(i=m;i>0;b[i]=b[i-1],i--);
a[0]=0;
b[0]=0;
q=0;
pi[1]=0;
for(i=2;i<=n;i++)
	{while(q&&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&&a[q+1]!=b[i])
		q=pi[q];
	if(a[q+1]==b[i])
		q++;
	if(q==n)
		{q=pi[n];
		nr++;
		if(nr<=1000)
		sol[nr]=i-n;  
		}  
	}
ofstream out("strmatch.out");
for(i=1;i<=min(nr,1000);i++)
	out<<sol[i]<<" ";
out<<'\n';
out.close();
return 0;
}