Cod sursa(job #1180047)

Utilizator meriniucrMeriniuc Razvan- Dumitru meriniucr Data 29 aprilie 2014 20:48:36
Problema Reguli Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;

ifstream mama("reguli.in");
ofstream tata("reguli.out");

int x[500005],p[500004],n;

void prefix()
{
    int k=0;
    p[1]=0;
    for(int i=2;i<=n-1;i++)
    {
        while(k>0 and x[k+1]!=x[i])
            k=p[k];
        if(x[k+1]==x[i])
            k++;
        p[i]=k;
    }
}

int main()
{
    int i,a,b,l=0;

    mama>>n>>a;
    for(i=2;i<=n;i++)
    {
        mama>>b;
        x[i-1]=b-a;
        a=b;
    }

    prefix();
    i=n-1;
    if(p[i]>0)
        {
            while((p[i]==p[i-1]+1 or (p[i]==p[i-1] and p[i]==0)) and i>1)
            {
                if(p[i]==0) l++;
                i--;
            }
           tata<<l+1<<'\n';
           for(i=1;i<=l;i++)
            tata<<x[i]<<'\n';
        }
        else tata<<0;
    return 0;
}