Cod sursa(job #514130)

Utilizator vendettaSalajan Razvan vendetta Data 17 decembrie 2010 20:59:34
Problema Numarare Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
const f='numararee.in';g='numararee.out';maxn=100005;
var
    a,l:array[0..maxn] of longint;
    rez,st,dr,i,n,p:longint;

begin
    assign(input,f);reset(input);
    assign(output,g);rewrite(output);
    readln(n);
    for i:=1 to n do
        begin
        read(a[i]);
        a[i-1]:=a[i-1]-a[i];
        end;
    n:=n-1;
    l[1]:=0;
    st:=1;
    dr:=1;
    for i:=2 to n do
        if (i<=dr) then
            begin
            p:=st+dr-i;
            if l[p]>=dr-i then l[i]:=dr-i
                        else l[i]:=l[p];
            if (i+l[i]=dr) then
                begin
                st:=i-l[i];
                dr:=i+l[i];
                while(st>1) and (dr<n) and (a[i-l[i]-1]=a[i+l[i]+1]) do
                    begin
                    l[i]:=l[i]+1;
                    st:=st-1;
                    dr:=dr+1;
                    end;
                end;
            end
            else
                begin
                l[i]:=0;
                st:=i;
                dr:=st;
                while (st>1)and(dr<n)and(a[i-l[i]-1]=a[i+l[i]+1]) do
                    begin
                    l[i]:=l[i]+1;
                    st:=st-1;
                    dr:=dr+1;
                    end;
                end;
    for i:=1 to n do
        rez:=rez+l[i]+1;
    write(rez);
    close(input);close(output);
end.