Cod sursa(job #2738301)

Utilizator stefantagaTaga Stefan stefantaga Data 5 aprilie 2021 17:45:19
Problema Cadrane Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("numarare.in");
ofstream g("numarare.out");
int n,i,x,v[200005],st1,dr1,st,dr,val[200005],oglin,sum,v1[200005];
void brut()
{
    int nr=0,fin=0,i,sum;
    for (i=2;i<=n;i++)
    {
        st=i-1;
        dr=i;
        sum=v1[i]+v1[i-1];
        nr=1;
        while (st-1>0&&dr+1<=n&&v1[st-1]+v1[dr+1]==sum)
        {
            st--;
            dr++;
            nr++;
        }
        fin=fin+nr;
    }
    g<<fin<<" ";
}
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>v1[i];
        v[2*i-1]=v1[i];
        v[2*i]=0;
    }
    st=0;
    dr=-1;
    for (i=2;i<=2*n-1;i+=2)
    {
            if (dr<i)
        {
            st1=i-3;
            dr1=i+3;
            val[i]=1;
            while (st1>0&&dr1<=2*n&&v[st1]+v[dr1]==v[i-1]+v[i+1])
            {
                st1-=2;
                dr1+=2;
                val[i]++;
            }
            st=i-2*val[i]+1;
            dr=i+2*val[i]-1;
        }
            else
            {
                oglin=st+dr-i;
                val[i]=val[oglin];
                if (i+2*val[oglin]-1>=dr)
                {
                    val[i]=(dr-i)/2;
                    st1=i-2*val[i]-1;
                    dr1=i+2*val[i]+1;
                    while (st1>0&&dr1<=2*n&&v[st1]+v[dr1]==v[i-2*val[i]+1]+v[i+2*val[i]-1])
                    {
                        st1-=2;
                        dr1+=2;
                        val[i]++;
                    }
                }
                if (dr<i+2*val[i]-1)
                {
                    st=i-2*val[i]+1;
                    dr=i+2*val[i]-1;
                }
            }
            sum=sum+val[i];
    }
    g<<sum;
    return 0;
}