Cod sursa(job #1685420)

Utilizator GinguIonutGinguIonut GinguIonut Data 11 aprilie 2016 17:43:48
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

#define nMax 100002
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int n;
int v[nMax], dp[nMax];
long long Sol;
void read()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
}
void solve()
{
    int C=0, R=0;

    for(int i=1;i<=n;i++)
    {
        if(i<R)
            dp[i]=min((R-i), dp[C-(i-C)]);
        dp[i]=max(dp[i], 1);
        while(v[i-dp[i]] + v[i+dp[i]+1]==v[i]+v[i+1] && i-dp[i]>=1 && i+dp[i]+1<=n)
            dp[i]++;
        if(i+dp[i]>R)
        {
            C=i;
            R=i+dp[i];
        }
        Sol+=dp[i];
    }
    Sol--;
}
void write()
{
    fout<<Sol;
}
int main()
{
    read();
    solve();
    write();
    return 0;
}