Cod sursa(job #219259)

Utilizator catalina5catalina serban catalina5 Data 6 noiembrie 2008 09:30:15
Problema Reguli Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream fin("reguli.in");
ofstream fout("reguli.out");

int n=1,m,a[500001],poz[500001],sol;

void citire(){
    fin>>m;
    int x0;
    fin>>x0;
    int x;
    for(int i=1;i<m;i++){
        fin>>x;
        a[n++]=x-x0;
        x0=x;
       // viz[x]++;
    }
}
void prefix(){
    int k=0;
    for(int i=2;i<n;i++){
        while(k&&a[k+1]!=a[i])
            k=poz[k];
        if(a[k+1]==a[i])
            k++;
        poz[i]=k;
        if(poz[i])
            if(!(i%(i-poz[i])))
                sol=i;
    }
}
void afis(){
    for(int i=1;i<=sol;i++)
            if(1==poz[i])
                sol=i;
    if(sol==0){
        fout<<n-1<<"\n";
        for(int i=1;i<n;i++)
            fout<<a[i]<<"\n";
        return;
    }
    fout<<sol-1<<"\n";
    for(int i=1;i<sol;i++)
        fout<<a[i]<<"\n";

}

int main(){
    citire();
    prefix();
    afis();
    fin.close();
    fout.close();
    return 0;
}