Cod sursa(job #381646)

Utilizator SheepBOYFelix Liviu SheepBOY Data 11 ianuarie 2010 12:14:46
Problema Potrivirea sirurilor Scor 16
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
char toc[2000001],mtb[2000001];
int path[2000001];
int main()
{
	char ln=0,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]-'A';
		key2+=mtb[i]-'A';
		if(toc[i]!=mtb[i])
			ok=0;
	}
	if(ok)
	{
		path[nr]=0;
		++nr;
	}
	for(i=ln;mtb[i];++i)
	{
		key2+=mtb[i]-'A';
		key2-=mtb[i-ln]-'A';
		ok=1;
		if(key2==key)
		{
			for(j=i-ln+1;j<=i;++j)
				if(toc[j-(i-ln+1)]!=mtb[j])
				{ok=0;break;}
			if(ok)
			{
				path[nr]=i-ln+1;
				nr++;
			}
		}
	}
	printf("%d\n",nr);
	if(nr>999)
		nr=1000;
	for(i=0;i<nr;++i)
		printf("%d ",path[i]);
	return 0;
}