Cod sursa(job #975804)

Utilizator Athena99Anghel Anca Athena99 Data 21 iulie 2013 17:43:28
Problema Reguli Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cassert>
#include <cstdio>

const int nmax=500010;
int p[nmax],v[nmax];
int n=0,i=0,l=0,a=0,b=0;

void prefix()
{
    int k=0;
    for(i=2; i<n; ++i)
    {
        while(v[i]!=v[k+1] && k>0)
            k=p[k];

        if(v[i]==v[k+1])
            ++k;
        p[i]=k;
    }
}

int main()
{
    assert(freopen("reguli.in","r",stdin));
    assert(freopen("reguli.out","w",stdout));

    assert(scanf("%d%d",&n,&a));
    for(i=1; i<n; ++i)
    {
        b=a;
        assert(scanf("%d",&v[i]));
        a=v[i];
        v[i]-=b;
    }

    prefix();
    l=n-1-p[n-1];
    printf("%d\n",l);

    for (i=1; i<=l; ++i)
        printf("%d\n",v[i]);

    return 0;
}