Cod sursa(job #1088857)

Utilizator gerd13David Gergely gerd13 Data 20 ianuarie 2014 21:40:01
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>


using namespace std ;

const int NMAX =  100010;

ifstream cin("numarare.in") ;
ofstream cout("numarare.out") ;


int V[NMAX], S[NMAX], N, p, sol;

int main() {

    cin >> N >> V[1] ;
    for(int i  = 2 ;  i <= N ; ++ i)
    {
        cin >> V[i] ;
        V[i-1] = V[i-1] - V[i] ;
    }

    p = 1 ;
    -- N ;
    for(int i  = 1 ; i <= N ; ++ i)
    {
        if(i < p + S[p])
        S[i] = min(S[2*p-i], p + S[p] - i) ;
        if(i + S[i] >= p + S[p])
        {
            p = i ;
            while ( i - S[i] - 1 >= 1 && i + S[i] + 1 <= N && V[i -S[i] - 1] == V[i + S[i] + 1])
             ++ S[i];
        }
    }
    sol = N ;
    for(int i = 1 ; i <= N; ++ i)
    sol = sol + S[i] ;
    cout << sol ;
    cin.close() ;
    cout.close() ;
    return  0;
}