Cod sursa(job #527425)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 31 ianuarie 2011 15:03:06
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>
#define maxn 500010
#define ll long long

int i,N;
ll v[maxn],pi[maxn];

void citire()
{
	scanf("%d",&N);
	for(i=1;i<=N;i++)
		scanf("%lld",&v[i]);
}

void prelucrare()
{
	for(i=1;i<=N-1;i++)
		v[i]=v[i+1]-v[i];
	N--;
}

void perioada()
{
	int k=0;
	for(i=2;i<=N;i++)
	{
		while(k>0 && v[k+1]!=v[i])
			k=pi[k];
		if(v[k+1]==v[i])
			k++;
		pi[i]=k;
	}
}

void afisare()
{
	N-=pi[N];
	printf("%d\n",N);
	for(i=1;i<=N;i++)
		printf("%lld\n",v[i]);
}

int main()
{
	freopen("reguli.in","r",stdin);
	freopen("reguli.out","w",stdout);
	citire();
	prelucrare();
	perioada();
	afisare();
}