Cod sursa(job #2582379)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 16 martie 2020 17:40:40
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int v[N];
int p[N];
int main()
{
  FILE*fin,*fout;
  fin=fopen("numarare.in","r");
  fout=fopen("numarare.out","w");
  int n;
  fscanf(fin,"%d",&n);
  for(int i=1;i<=n;i++)
    fscanf(fin,"%d",&v[i]);
  v[0]=v[n+1]=5*N;
  int c,r=0;
  for(int i=1;i<n;i++){
    int rad=0;
    if(i<r){
      rad=min(r-i-1,p[2*c-i]);
    }
    int ct=v[i-rad]+v[i+rad+1];
    while(v[i-rad-1]+v[i+rad+2]==ct)
      rad++;
    p[i]=rad;
    if(i+p[i]>r){
      c=i;
      r=i+p[i];
    }
  }
  long long ans=0;
  for(int i=1;i<n;i++){
    ans+=p[i]+1;
  }
  fprintf(fout,"%lld",ans);
  return 0;
}