Cod sursa(job #178453)

Utilizator CezarMocanCezar Mocan CezarMocan Data 14 aprilie 2008 17:06:13
Problema Reguli Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

using namespace std;

long long n,i,j,p[500100],a[500100],x,ant,mx;

int main(){
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
scanf("%d",&a[0]);
ant=a[0];
for (i=1;i<n;i++)
    {
    scanf("%lld",&j);
    a[i]=j-ant;
    ant=j;
    }
n--;
p[0]=-1;
p[1]=0;
for (i=2;i<=n;i++)
    {
    x=p[i-1];
    if (a[x+1]==a[i])
        p[i]=x+1;
    else    
        {
        while (x>=0)
            {
            x=p[x];
            if (x<0)
                break;
            if (a[x+1]==a[i])
                {
                p[i]=x+1;
                break;    
                }    
            }
        }
    }
for (i=1;i<=n;i++)
    if ((i-p[i])>mx)
        mx=i-p[i];
printf("%lld\n",mx);
for (i=1;i<=mx;i++)
    printf("%lld\n",a[i]);
return 0;    
}