Cod sursa(job #19328)

Utilizator gcosminGheorghe Cosmin gcosmin Data 19 februarie 2007 11:51:51
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <string.h>

#define NMAX 500010

int N;

long long a[NMAX];
long long s[NMAX];

int main()
{
	int i, l = 0, p = 0, beg, e, lmax;
	
	freopen("reguli.in", "r", stdin);
	freopen("reguli.out", "w", stdout);
	
	scanf("%d", &N);

	for (i = 0; i < N; i++) scanf("%lld", &a[i]);
	for (i = 0; i < N - 1; i++) s[i] = a[i+1] - a[i];

	l = p = 0;
	beg = 0;
	lmax = 0;

	for (i = 1; i < N - 1;)
	{
		e = 0;
		if (s[i] == s[beg]) beg++, e = 1;
		else {
			if (beg == 0) e = 1;
			beg = 0, p = 0, l = 0;
		}

		if (beg == p) {
			l += p;
			if (l > lmax) lmax = l;
			beg = 0;
		}

		if ( beg && (i & 1) &&  ((beg == (i+1) >> 1) || ( beg == 1 && i == 1))) {
			l = i+1;
			if (l > lmax) lmax = l;
			p = (i+1) >> 1;
			beg = 0;
		}
		if (e) i++;
	}

	if (!p) p = N - 1;

	printf("%d\n", p);

	for (i = 0; i < p; i++) printf("%lld\n", s[i]);

fclose(stdin);
fclose(stdout);
return 0;
}