Cod sursa(job #91941)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 13 octombrie 2007 20:10:07
Problema Reguli Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<stdio.h>
#define vv 500002

long n;
long long x[vv],w[vv],p[vv],max;

void citire()
{
	freopen("reguli.in","r",stdin);
	scanf("%ld",&n);
	for (int i=0; i<n; i++)
		scanf("%lld",&x[i]);
	fclose(stdin);
}

void prec()
{
	int k=0;
	p[1]=0;
	w[1]=x[1]-x[0];
	max=1;
	for (int i=2; i<n; i++)
	{
		w[i]=x[i]-x[i-1];
		while (k>0 && w[k+1]!=w[i])
			k=p[k];
		if (w[k+1]==w[i])
			++k;
		p[i]=k;
		if (p[i]<=p[i-1])//==0)
			max=i-1;
	}
}

void afisare()
{
	freopen("reguli.out","w",stdout);
	printf("%lld\n",max);
	for (int i=1; i<=max; i++)
		printf("%lld\n",w[i]);
	fclose(stdout);
}

int main()
{
	citire();
	prec();
	afisare();
	return 0;
}