Cod sursa(job #1660485)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 23 martie 2016 10:16:54
Problema Reguli Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,ok;
long long v[500001],x,y;
int pi[500001],p,res[500001],k;
ifstream f("reguli.in");
ofstream g("reguli.out");
int main()
{
    f>>n;
    n--;
    f>>x;
    for(int i=1;i<=n;i++)
    {
        f>>y;
        v[i]=y-x;
        x=y;
    }
    for(int i=2;i<=n;i++)
    {
        while(p&&v[i]!=v[p+1])p=pi[p];
        if(v[i]==v[p+1])p++;
        pi[i]=p;
        if(i==p*2)res[++k]=p;
    }
    int i,j;
    for(i=1;i<=k;i++)
    {
        ok=1;
        for(j=res[i]*3;j<=n;j+=res[i])
            if(pi[j]!=j-res[i]){ok=0;break;}
        if(ok)break;
    }
    if(!ok)i=n;
    g<<res[i]<<'\n';
    for(j=1;j<=res[i];j++)
        g<<v[j]<<"\n";
    return 0;
}