Cod sursa(job #2716562)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 5 martie 2021 12:32:08
Problema Reguli Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <iostream>

using namespace std;

const int N = 5e5;

long long sp[N + 1];
int pi[N + 1];

int main() {
    ifstream in("reguli.in");
    ofstream out("reguli.out");

    int n, x0, lung, p;
    in >> n >> sp[0];
    --n;
    for (int i = 1; i <= n; ++i)
        in >> sp[i];
    pi[1] = lung = 0;
    for (int i = 2; i <= n; ++i) {
        while (lung > 0 && sp[i] - sp[i - 1] != sp[lung + 1] - sp[lung])
            lung = pi[lung];
        if (sp[i] - sp[i - 1] == sp[lung + 1] - sp[lung])
            ++lung;
        pi[i] = lung;
        cout << sp[i] - sp[i - 1] << ' ';
    }
    p = n - pi[n];
    out << p << '\n';
    for (int i = 1; i <= p; ++i)
        out << sp[i] - sp[i - 1] << '\n';

    in.close();
    out.close();
    return 0;
}