Cod sursa(job #1819126)

Utilizator dungdxhpDONG XUAN DUNG dungdxhp Data 30 noiembrie 2016 10:59:32
Problema Reguli Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
#define forinc(i, j, k) for(int i = j, _k = k; i <= _k; ++i)
#define nn 5000001
#define ll long long

using namespace std;

ll x[nn], a[nn];int nxt[nn];
int n, result;

int read()
{
    ll res = 0;
    char c = getchar();
    while(c < '0'|| c > '9') c = getchar();
    for(; c >='0' && c <='9'; c = getchar()) res = res * 10 + c - '0';
    return res ;
}

int main()
{
    freopen("reguli.in", "r", stdin);
    freopen("reguli.out", "w", stdout);
    //n = read();
    cin >> n;
    n--;
    forinc(i, 0, n)
    {
        //x[i] = read();
        cin >> x[i];
    }
    forinc(i, 1, n) a[i] = x[i] - x[i - 1] ;
    //forinc(i, 1, n) cout << a[i]<<endl;
    int j = 0 ;
    forinc(i, 2, n)
    {
        while(j != 0 && a[i] != a[j + 1]) j = nxt[j];
        if (a[i] == a[j + 1]) nxt[i] = ++j;
    }
    cout << (result = n - nxt[n]) << "\n";
    forinc(i, 1, result) cout << a[i]<< "\n";
    //printf("%d \n", result);
    //forinc(i, 1, result) printf("%lld \n", a[i]);
}