Cod sursa(job #192702)

Utilizator raduzerRadu Zernoveanu raduzer Data 31 mai 2008 13:01:58
Problema Potrivirea sirurilor Scor 38
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <string.h>

int n,m,k,i,j,t,a[2000005],b[2000005],q,c[1005];
char x;

int main()
{
	freopen("strmatch.in","r",stdin);
	freopen("strmatch.out","w",stdout);
	k=0;
	while (1)
	{
		scanf("%c",&x);
		if (x=='\n') break;
		++k;
		if (x>='0' && x<='9') b[k]=b[k-1]+(x-'0');
		if (x>='A' && x<='Z') b[k]=b[k-1]+(x-'A');
		if (x>='a' && x<='z') b[k]=b[k-1]+(x-'a');
	}
	n=0;
	while (1)
	{
		scanf("%c",&x);
		if (x=='\n') break;
		++n;
		if (x>='0' && x<='9') a[n]=a[n-1]+(x-'0');
		if (x>='A' && x<='Z') a[n]=a[n-1]+(x-'A');
		if (x>='a' && x<='z') a[n]=a[n-1]+(x-'a');
	}
	int sol=0;
	for (i=k; i<=n; ++i)
		if (b[k]==a[i]-a[i-k])
		{
			q=1;
			for (j=1; j<=k; ++j) if (b[j]!=a[i-k+j]-a[i-k]) { q=0; break; }
			if (q) ++sol;
			if (q && sol<=1000) c[sol]=i-k;
		}
	printf("%d\n",sol);
	for (i=1; i<=sol; ++i) printf("%d ",c[i]);
	return 0;
}