Cod sursa(job #93397)

Utilizator frEak-Calin Paul frEak- Data 18 octombrie 2007 18:25:32
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
//melc.
#include<stdio.h>
int n,k,i,aux;
long long a[500001];
bool gasit;
void citire()
{
	freopen("reguli.in","r",stdin);
	scanf("%d\n",&n);
	k=0; long long prev,aux;
	scanf("%lld\n",&prev);
	for (int i=1;i<n;i++)
	{
		scanf("%lld\n",&aux);
		a[i]=aux-prev;
		prev=aux;
	}
	fclose(stdin);
}
void afis()
{
	freopen("reguli.out","w",stdout);
	printf("%d\n",k);
	for (i=1;i<=k;i++) printf("%lld\n",a[i]);
	fclose(stdout);
}

void perioada()
{
	gasit=false;k=0;aux=1;
	for (i=2;i<n;i++)
	{
		if (a[i]==a[aux])
		{
			if (aux==(i+1)/2) 
			{
				if (!gasit) k=aux; 
				gasit=true;
			}
			if (!gasit) aux++;
			else aux=aux%k+1;
		}
		else
		{
			gasit=false;
			aux=1;k=0;
			if (a[i]==a[aux]) aux++;
		}
	}
	if (aux>1&&!gasit) k=n-aux;
	if (k==0) k=n-1;
}
int main()
{
	citire();
	perioada();
	afis();
	return 0;
}