Cod sursa(job #359784)

Utilizator tehnologyGuiman George tehnology Data 28 octombrie 2009 12:11:31
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream.h>
#include<string.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int i,q,k,n,m,nr,l,v[1000],urm[2000000];
char P[2000000],T[2000000],aux[2000000];
int main()
{
f.get(T,2000000);
f.get();
f.get(P,2000000);
m=strlen(P);
n=strlen(T);
strcpy(aux," ");
strcat(aux,T);
strcpy(T,aux);
strcpy(aux," ");
strcat(aux,P);
strcpy(P,aux);
urm[1]=0;
k=0;
l=0;
for(q=2;q<=m;q++)
	{
	while((k>0)&&(P[k+1]!=P[q]))
		 k=urm[k];
	if(P[k+1]==P[q])
		k=k+1;
	urm[q]=k;
	}
q=0;
nr=0;
for(i=1;i<n;i++)
	{
	while((q>0)&&(P[q+1]!=T[i]))
            q=urm[q];
    if(P[q+1]==T[i])
        q=q+1;
	if(q==m)
		{
		l++;
		v[l]=i-m;
		q=urm[q];
		nr++;
	}
	}
g<<nr<<'\n';
for(i=1;i<=l;i++)
	g<<v[l];
f.close();
g.close();
return 0;
}