Cod sursa(job #21711)

Utilizator azotlichidAdrian Vladu azotlichid Data 24 februarie 2007 01:32:26
Problema Reguli Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <vector>

#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>

#define ALL(x) (x).begin(), (x).end()
#define CLEAR(X) (memset(X, 0, sizeof(X)))
#define FORI(it, x) for (__typeof((x).begin()) it = (x).begin(); it != (x).end(); ++it)
#define FOR(i, N, M) for (int i = (int)(N); i <= (int)(M); ++i)
#define REP(i, N) for (int i = 0; i < (int)(N); ++i)
#define SIZE(X) (int)((X).size())
#define TIPA(a, i) (cerr << #a << "[" #i " = " << (i) << "] = " << (a)[i] << endl)
#define TIP(x) (cerr << #x << " = " << (x) << endl)

#define MP make_pair
#define PB push_back
#define INF 0x3f3f3f3f

typedef long long LL;

using namespace std;

int N, k;
long long a[500005];
int pi[500005];

int main(void) {
	freopen("reguli.in", "r", stdin);
    freopen("reguli.out", "w", stdout);
    scanf("%d", &N);
    REP(i, N) scanf("%d", &a[i]);
    for (int i = N - 1; i >= 1; i --) a[i] -= a[i - 1];

    k = pi[1] = 0;
    FOR(i, 2, N - 1)
    {
        while (k > 0 && a[k + 1] != a[i]) k = pi[k];
        if (a[k + 1] == a[i]) ++ k;
        pi[i] = k;
    }
    
    int Ans = N - 1 - pi[N - 1];
    printf("%d\n", Ans);
    FOR(i, 1, Ans) printf("%d\n", a[i]);

    return 0;
}