Cod sursa(job #2461156)

Utilizator FrostfireMagirescu Tudor Frostfire Data 24 septembrie 2019 22:24:24
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <iostream>
#include <vector>
#define inf 1000000000
#define NMAX 100000

using namespace std;

ifstream f("numarare.in");
ofstream g("numarare.out");

int n, sol, v[NMAX+10], dif[NMAX+10], a[NMAX+10];
vector <int> s;

int main()
{
    f >> n >> v[1];
    for(int i=2; i<=n; i++)
        {   f >> v[i];
            dif[i-1] = v[i-1] - v[i];
        }
    n--;
    int val1 = inf, val2 = inf+1, val3 = inf+2;
    s.push_back(val1);
    for(int i=1; i<=n; i++)
        {   s.push_back(val2);
            s.push_back(dif[i]);
        }
    s.push_back(val2);
    s.push_back(val3);

    int C = 0, R = 0;
    for(int i=1; i<s.size()-1; i++)
        {   int ogl = 2*C - i;
            if(i < R) a[i] = min(R-i, a[ogl]);
            while(s[i+a[i]+1] == s[i-a[i]-1]) a[i]++;
            if(a[i] + i > R)
                {   R = a[i] + i;
                    C = i;
                }
        }
    for(int i=2; i<s.size()-1; i+=2) sol = sol + a[i]/2 + 1;
    g << sol << '\n';
    return 0;
}