Cod sursa(job #1512507)

Utilizator hrazvanHarsan Razvan hrazvan Data 28 octombrie 2015 10:02:08
Problema Numarare Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define MAXN 100000
int v[MAXN], d[MAXN];

inline int min2(int a, int b){
  return a < b ? a : b;
}

int main(){
  FILE *in = fopen("numarare.in", "r");
  int n, i, x, y;
  fscanf(in, "%d%d", &n, &x);
  for(i = 1; i < n; i++){
    fscanf(in, "%d", &y);
    v[i - 1] = y - x;
    x = y;
  }
  int p, dr = -1, j, rez = 0;
  for(i = 0; i < n - 1; i++){
    if(i > dr)
      j = 0;
    else
      j = min2(d[p - (i - p)], dr - i);
    while(i - j - 1 >= 0 && i + j + 1 < n - 1 && v[i - j - 1] == v[i + j + 1])
      j++;
    d[i] = j;
    if(i + j > dr){
      p = i;
      dr = i + j;
    }
    rez += d[i] + 1;
  }
  FILE *out = fopen("numarare.out", "w");
  fprintf(out, "%d", rez);
  fclose(out);
  return 0;
}