Cod sursa(job #1554112)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 20 decembrie 2015 22:07:41
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
# include <bits/stdc++.h>

using namespace std;

const int Nmax = 500000 + 5;

int phi[Nmax], N;
long long a[Nmax], ant, x;


void make_phi() {

    phi[1] = 0;

    for (int i = 2; i <= N; ++i){
       int k = phi[i - 1];

        while (k && a[k + 1] != a[i]) k = phi[k];

        if (a[k + 1] == a[i]) phi[i] = k + 1;
            else phi[i] = 0;
    }
}

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

    scanf("%d\n%lld\n", &N, &ant);

    N--;

    for (int i = 1; i <= N; ++i){
        scanf("%lld\n", &x);
        a[i] = x - ant;
        ant = x;
    }

    make_phi();

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

    for (int i = 1; i <= N - phi[N]; ++i)
        printf("%lld\n", a[i]);

    return 0;
}