Cod sursa(job #2017121)

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