Cod sursa(job #2185500)

Utilizator cella.florescuCella Florescu cella.florescu Data 24 martie 2018 16:21:32
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5;

int diff[MAXN + 1], man[MAXN + 1], v[MAXN + 1];

int main()
{
    int n;
    ifstream fin("numarare.in");
    fin >> n;
    for (int i = 1; i <= n; ++i)
      fin >> v[i];
    fin.close();
    for (int i = 1; i < n; ++i)
      diff[i] = v[i + 1] - v[i];
    int r = -1, l = -1;
    long long ans = 0LL;
    for (int i = 1; i < n; ++i) {
      if (i > r)
        man[i] = 1;
      else
        man[i] = min(r - i, man[r - i + l]);
      while (i + man[i] < n && diff[i + man[i]] == diff[i - man[i]])
        ++man[i];
      ans += man[i];
      if (i + man[i] - 1 > r) {
        r = i + man[i] - 1;
        l = i - man[i] + 1;
      }
    }
    ofstream fout("numarare.out");
    fout << ans << '\n';
    fout.close();
    return 0;
}