Cod sursa(job #2462235)

Utilizator deiubejanAndrei Bejan deiubejan Data 26 septembrie 2019 21:55:23
Problema Reguli Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("reguli.in");
ofstream fout("reguli.out");

#define ll long long
#define cin fin
#define cout fout
/*
*/


const int NMAX=1e6;
int n;
ll d[NMAX];
int dp[NMAX];///lungimea celui mai lung prefix care este si sufix pentru 1...i

void read()
{
    ll last, next;
    cin>>n>>last;
    n--;
    for(int i=0; i<n; i++)
    {
        cin>>next;
        d[i]=next-last;
        last=next;
    }
}

void computeLPS()
{
    int i=1, j=0;
    while(i<n)
    {
        if(d[i]==d[j])
        {
            j++;
            dp[i]=j;
            i++;
        }
        else
        {
            if(j)
                j=dp[j-1];
            else
                i++;
        }
    }
}

void solve()
{
    computeLPS();
    ll answ=n-dp[n-1];
    cout<<answ<<"\n";
    for(int i=0; i<answ; i++)
        cout<<d[i]<<"\n";
}


int main()
{
    read();
    solve();


    return 0;
}