Pagini recente » Cod sursa (job #2746906) | Cod sursa (job #1552199) | Cod sursa (job #2184772) | Cod sursa (job #2821891) | Cod sursa (job #1130431)
type vector=array[1..10000] of integer;
var v:vector;
n,k,s:longint;
ultimele:boolean;
g:text;
Procedure citire;
var i:integer;
f:text;
Begin
assign(f,'oo.in'); reset(f);
readln(f,n);
For i:=1 to n do
read(f,v[i]);
close(f);
end;
function max2_v:integer;
var i,j,smax,k:longint;
Begin
smax:=-maxint; i:=1;
while i<=n do
Begin
If smax<v[i]+v[i+1] then
Begin
k:=i;
smax:=v[i]+v[i+1];
end;
i:=i+1;
end;
If (smax<(v[n]+v[1])) then
Begin
k:=n;
smax:=v[n]+v[1];
end;
max2_v:=k;
end;
procedure modif(k:longint;var v:vector);
Begin
If (k<>n)and (k<>1) then
Begin
v[k-1]:=-1; {marcam cu -1 cotetul gainilor care fug}
v[k+2]:=-1;
v[k]:=-1;
v[k+1]:=-1;
end;
If k=n then
Begin
v[k-1]:=-1;
v[n]:=-1;
v[1]:=-1;
v[2]:=-1;
end;
If k=1 then
Begin
v[1]:=-1;
v[n]:=-1;
v[2]:=-1;
v[3]:=-1;
end;
end;
function oprire(v:vector):boolean; { daca gasim k astfel incat v[k] sau v[k+1]=-1 se opreste}
var i:longint;
Begin
oprire:=true; ultimele:=false; i:=0;
While i<=n-1 do
Begin i:=i+1;
If (v[i]<>-1) and (v[i+1]<>-1) then
oprire:=false; {mai exista 2 posib}
end;
If (oprire=true) and ((v[n]<>-1) and (v[1]<>-1)) then {daca nu se mai pot aduna
simultan de pe 2 alaturatept ca v[i] sau v[i+1]=-1, atunci comparam si primul cu ultimul}
Begin
ultimele:=true;
end;
end;
procedure oo;
var i,j:longint;
Begin
while oprire(v)=false do
Begin
k:=max2_v;
If (k<>n) and (k<>1) then
s:=s+v[k]+v[k+1]
else
If k=n then
s:=s+v[n]+v[1]
else
If k=1 then
s:=s+v[1]+v[2];
modif(k,v);
end;
If (oprire(v)=true ) and (ultimele=true) then
Begin
s:=s+v[n]+v[i];
v[n]:=-1; v[1]:=-1;
end;
end;
BEGIN
citire;
oo;
assign(g,'oo.out');rewrite(g);
write(g,s);
close(g);
END.