Cod sursa(job #2224684)

Utilizator razviii237Uzum Razvan razviii237 Data 24 iulie 2018 20:23:40
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;
typedef long long lint; //I64
const int maxn = 5e5+5;

ifstream f("reguli.in");
ofstream g("reguli.out");

int n, i, ak;
lint v[maxn], dif[maxn];
lint prefix[maxn];

void prefix_calculate()
{
    int i, a = 0;
    prefix[1] = 0;
    for(i = 2; i <= n-1; i ++)
    {
        while(a > 0 && dif[i] != dif[a+1])
            a = prefix[a];
        if(dif[i] == dif[a+1])
            ++a;
        prefix[i] = a;
    }
    ak = n-1 - prefix[n-1];
}

int main()
{
    f >> n >> v[1];
    for(i = 2; i <= n; i ++){
        f >> v[i];
        dif[i-1] = v[i] - v[i-1];
    }

    prefix_calculate();

    g << ak << '\n';
    for(i = 1; i <= ak; i ++)
        g << dif[i] << '\n';

    return 0;
}