Cod sursa(job #302196)

Utilizator vladbBogolin Vlad vladb Data 8 aprilie 2009 18:58:28
Problema Reguli Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>

long long n,x[500005],d[500005],pi[500005],r,c,pmin;

void prefix()
{   long k=0,i;
    for(i=2,pi[1]=0;i<=n;i++)
    {    while(k>0&&d[k+1]!=d[i])
              k=pi[k];
         if(d[k+1]==d[i])
             k++;
         pi[i]=k;
    }
}      

int main()
{   long long i;
    freopen("reguli.in","r",stdin);
    freopen("reguli.out","w",stdout);
    scanf("%lld",&n);
    for(i=1;i<=n;i++)
    {   scanf("%lld",&x[i]);
        d[i-1]=x[i]-x[i-1];
    }
    prefix();
    for(i=1;i<=n;i++)
    {   r=n%i;
        c=n/i;
        if(pi[n-r]>0&& (n-r)%(n-r-pi[n-r])==0 &&(n-r)/(n-r-pi[n-r])==c)
        {   pmin=i;
            break;
        }
    }
    printf("%lld\n",pmin);
    for(i=1;i<=pmin;i++)
        printf("%lld\n",d[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}