Cod sursa(job #466570)

Utilizator freak93Adrian Budau freak93 Data 27 iunie 2010 10:47:10
Problema Numarare Scor 100
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 0.87 kb
#include<fstream>

using namespace std;

const char iname[]="numarare.in";
const char oname[]="numarare.out";
const int maxn=100005;

ifstream f(iname);
ofstream g(oname);

int a[maxn],l[maxn],st,dr,i,n,p;

long long rez;

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>a[i],a[i-1]-=a[i];
    --n;
    l[1]=0;
    st=1;
    dr=1;
    for(i=2;i<=n;++i)
        if(i<=dr)
        {
            p=st+dr-i;
            l[i]=min(l[p],dr-i);
            if(i+l[i]==dr)
            {
                st=i-l[i];
                dr=i+l[i];
                while(st>1&&dr<n&&a[i-l[i]-1]==a[i+l[i]+1])
                    ++l[i],--st,++dr;
            }
        }
        else
        {
            l[i]=0;
            st=dr=i;
            while(st>1&&dr<n&&a[i-l[i]-1]==a[i+l[i]+1])
                ++l[i],--st,++dr;
        }
    for(i=1;i<=n;++i)
        rez+=l[i]+1;

    g<<rez<<"\n";
}