Cod sursa(job #18984)

Utilizator sims_glAlexandru Simion sims_gl Data 18 februarie 2007 16:19:43
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>

#define nm 524288

int n, p[nm];
long long v[nm], a[nm];

int main()
{
	int i, j;

	freopen("reguli.in", "r", stdin);
    freopen("reguli.out", "w", stdout);

    scanf("%d", &n);

    for (i = 1; i <= n; ++i)
    {
    	scanf("%lld", &v[i]);

        if (i > 1)
	        a[i - 1] = (long long)v[i] - v[i - 1];
    }

    --n;

    p[1] = j = 0;

    for (i = 2; i <= n; ++i)
    {
    	while(j && a[j + 1] != a[i])
        	j = p[j];

        if (a[j + 1] == a[i])
        	++j;

        p[i] = j;
    }

    printf("%d\n", n - p[n]);

    for (i = 1; i <= n - p[n]; ++i)
    	printf("%lld\n", a[i]);
    
	return 0;
}