Cod sursa(job #1203926)

Utilizator pentrusandaPentru Sanda pentrusanda Data 1 iulie 2014 15:55:16
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

long long n,a[500005],z[500005];

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

    in>>n;
    for (int i=0;i<n;++i)
    {
        in>>a[i];
    }
    for (int i=0;i<n-1;++i) a[i]=a[i+1]-a[i];
    n=n-1;

    long long st=0,dr=0,per=n,advr=0;
    for (int i=1;i<n;++i)
    {
        if (i<=dr)
        {
            z[i]=z[i-st];
            if (z[i]>dr-i+1) z[i]=dr-i+1;
        }
        while(i+z[i]<n && a[z[i]]==a[z[i]+i]) ++z[i];
        if (dr<i+z[i]-1) dr=i+z[i]-1,st=i;
        if (z[i]==n-i && advr==0) per=i,advr=1;
    }

    out<<per<<"\n";

    for (int i=0;i<per;++i) out<<a[i]<<"\n";

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