Cod sursa(job #2516848)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 2 ianuarie 2020 14:54:51
Problema Reguli Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>
#define MAX 500010

using namespace std;

int n;
int x[MAX],a[MAX],pi[MAX];

void calc_pi(int v[MAX],int n){
  pi[1]=0;
  int la=0;
  for(int i=2;i<=n;)
    if(v[i]==v[la+1])pi[i++]=++la;
    else
      if(la!=0)la=pi[la];
      else pi[i++]=0;
}

int main()
{
    ifstream f ("reguli.in");
    ofstream g ("reguli.out");
    f>>n;
    for(int i=1;i<=n;i++)f>>x[i];
    for(int i=1;i<n;i++)a[i]=x[i+1]-x[i];
    calc_pi(a,n-1);
//    for(int i=1;i<n;i++)
//      cout<<a[i]<<" ";
//    cout<<'\n';
//    for(int i=1;i<n;i++)cout<<pi[i]<<" ";
//    cout<<n-1<<" "<<pi[n-1];
    if(pi[n-1]>=(n-1)/2){
      int per=n-1-pi[n-1];
      g<<per<<'\n';
      for(int i=1;i<=per;i++)
        g<<a[i]<<'\n';
    } else {
      g<<n-1<<'\n';
      for(int i=1;i<=n-1;i++)
        g<<a[i]<<'\n';
    }
    f.close ();
    g.close ();
    return 0;
}