Cod sursa(job #219753)

Utilizator catalina5catalina serban catalina5 Data 8 noiembrie 2008 11:00:51
Problema Reguli Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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;
       }
   }
   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-k;
       }
   }
   void afis(){
       if(sol==0){
           fout<<n-1<<"\n";
           for(int i=1;i<n;i++)
               fout<<a[i]<<"\n";
           return;
       }
       if(sol==-1){
           fout<<n<<"\n";
           for(int i=1;i<=n;++i)
            fout<<a[i]<<"\n";
            return ;
       }
        fout<<sol<<"\n";
       for(int i=1;i<=sol;i++)
           fout<<a[i]<<"\n";
   }

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