Cod sursa(job #1179572)

Utilizator gapdanPopescu George gapdan Data 28 aprilie 2014 21:30:15
Problema Reguli Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<cstdio>
using namespace std;
long long n,a[500005],d[500005],rez[500005];
void calcul()
{
    int k=0,q;
    rez[1]=0;
    for (q=2;q<=n;++q)
    {
        while (k>0 && d[q]!=d[k+1]) k=rez[k];
        if (d[q]==d[k+1]) ++k;
        rez[q]=k;
    }
}
int main()
{
    int i,poz;
    freopen("reguli.in","r",stdin);
    freopen("reguli.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i) scanf("%d",&a[i]);
    for (i=2;i<=n;++i) d[i-1]=a[i]-a[i-1];
    n=n-1;
    calcul();
    printf("%lld\n",n-rez[n]);
    for (i=1;i<=n-rez[n];++i) printf("%lld\n",d[i]);
    return 0;
}