Cod sursa(job #1956449)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 6 aprilie 2017 19:22:10
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;

fstream in ( "numarare.in" , ios::in  );
fstream out( "numarare.out", ios::out );

const int DIM = 1e5 + 5;

int arr[DIM], len[DIM];

int main( void ) {
    
    int n;
    in >> n;
    
    for( int i = 1; i <= n; i ++ ) {
        in >> arr[i];
        arr[i - 1] -= arr[i];
    }
    
    long long ans = 0; n --;
    for( int i = 1, le = 0, ri = 0, md = 0; i <= n; i ++ ) {
        if( i > ri ) {
            len[i] = 1;
            
            le = ri = md = i;
            while( le > 1 && ri < n && arr[le - 1] == arr[ri + 1] ) {
                len[i] ++;
                le --; ri ++;
            }
        }
        else {
            int ps = md - ( i - md );
            
            if( ps - len[ps] < le ) {
                len[i] = ri - i + 1;
                
                le = i - len[i] + 1; ri = ri; md = i;
                while( le > 1 && ri < n && arr[le - 1] == arr[ri + 1] ) {
                    len[i] ++;
                    le --; ri ++;
                }
            }
            else
                len[i] = len[ps];
        }
        
        ans += len[i];
    }
    
    out << ans << endl;
    return 0;
}