Cod sursa(job #2041514)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 17 octombrie 2017 14:47:10
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
#define VAL 100005
#define INF 1000000000

using namespace std;

ifstream fin("numarare.in");
ofstream fout("numarare.out");

int N, i, j;
int X[VAL], mx;
int P[VAL], id;
long long ANS;

int main()
{
    fin >> N;
    for (i=1; i<=N; i++)
    {
        fin >> X[i];
        X[i-1]=X[i]-X[i-1];
    }
    X[0]=INF;
    X[N]=-INF;
    ANS=P[1]=id=mx=1;
    for (i=2; i<N; i++)
    {
        if (i<=mx)
          P[i]=min(P[2*id-i], mx-i);
        else
          P[i]=1;
        while (X[i+P[i]]==X[i-P[i]])
          P[i]++;
        if (i+P[i]-1>mx)
        {
            id=i;
            mx=i+P[i]-1;
        }
        ANS+=P[i];
    }
    fout << ANS << '\n';
    fin.close();
    fout.close();
    return 0;
}