Cod sursa(job #381933)

Utilizator azotlichidAdrian Vladu azotlichid Data 12 ianuarie 2010 10:00:42
Problema Potrivirea sirurilor Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
char toc[2000001],mtb[2000001];
int path[2000001];
int main()
{
	int ln=0;int nr=0;
	long long key=0,key2=0;
	int ok,i,j;
	freopen("strmatch.in","r",stdin);
	freopen("strmatch.out","w",stdout);
	gets(toc);
	gets(mtb);
	ok=1;
	for(i=0;toc[i];++i)
	{
		ln++;
		key+=toc[i];
		key2+=mtb[i];
		if(toc[i]!=mtb[i])
			ok=0;
	}
	
	if(ok)
	{
		path[nr]=0;
		++nr;
	}
	
	for(i=ln;mtb[i];++i)
	{
		key2+=mtb[i];
		key2-=mtb[i-ln];
		ok=1;
		if(key2==key)
		{
			for(j=0;j<ln;++j)
				if(toc[(ln-1)-j]!=mtb[i-j])
				{ok=0;break;}
			if(ok)
			{
				path[nr]=i-(j-1);
				nr++;
			}
		}
	}
	printf("%d\n",nr);
	if(nr>999)
		nr=1000;
	for(i=0;i<nr;++i)
		printf("%d ",path[i]);
	return 0;
}