Cod sursa(job #1238124)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 5 octombrie 2014 18:26:18
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

#define NMAX 100007

using namespace std;

int n, Max, Ans;
int v[NMAX], p[NMAX];

int main(){
    freopen("numarare.in", "r", stdin);
    freopen("numarare.out", "w", stdout);
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &v[i]);
    p[0] = 1;
    for(int i = 1; i < n; ++i){
        int cnt = min(p[2 * Max - i], 2 * Max - i -(Max - p[Max]));
        int l;
        for(l = 0; i - cnt - l >= 1 && i + cnt + 1 + l <= n; ++l)
            if(v[i - cnt - l] + v[i + cnt + 1 + l] != v[i] + v[i + 1])
                break;
        p[i] = cnt + l;
        Ans += p[i];
        if(p[i] + i > p[Max] + Max)
            Max = i;
    }
    printf("%d", Ans);
    return 0;
}