Cod sursa(job #219741)

Utilizator catalina5catalina serban catalina5 Data 8 noiembrie 2008 10:49:01
Problema Reguli Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 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-k;
       }
   }
   void afis(){
       fout<<sol<<"\n";
       for(int i=1;i<=sol;i++)
           fout<<a[i]<<"\n";

   }

   int main(){
       citire();
       prefix();
       afis();
       for(int i=0;i<n;i++)
       cout<<poz[i];
       fin.close();
       fout.close();
       return 0;
   }