Cod sursa(job #2017115)

Utilizator robx12lnLinca Robert robx12ln Data 31 august 2017 12:31:14
Problema Numarare Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int v[200005], k, D[200005], n, R, C;
long long sol = 0;
int main(){
    fin >> n;
    k = 0;
    for( int i = 1; i <= n; i++ ){
        int x;
        fin >> x;
        v[++k] = x;
        v[++k] = 0;
    }
    v[0] = -200000;
    v[k] = -200000;
    n = k - 1;
    C = R = 0;
    for( int i = 2; i <= n; i += 2 ){
        int mirr_poz = C * 2 - i;
        D[i] = 2;
        int s = v[i - 1] + v[i + 1];
        int st = i - 1;
        int dr = i + 1;
        if( i <= R )
            D[i] = min( D[mirr_poz], R - i + 1 );
        while( st - 2 >= 1 && dr + 2 <= n && v[st - 2] + v[dr + 2] == s  ){
            st -= 2;
            dr += 2;
            D[i] += 2;
        }
        if( dr > R ){
            C = i;
            R = dr;
        }
        sol += D[i] / 2;
    }
    fout << sol << "\n";
    return 0;
}