Pagini recente » Cod sursa (job #308258) | Cod sursa (job #3256529) | Cod sursa (job #1140701) | Cod sursa (job #1487478) | Cod sursa (job #47162)
Cod sursa(job #47162)
type vector=array[1..600] of longint;
var v,o:vector;
f,g:text;
k,j,ss,d,n,i,min,c:integer;
r:longint;
s:array[1..600] of integer;
procedure quick(ss,d:integer);
var aux,a,b,ia:integer;
begin
a:=ss; b:=d;
repeat
while o[a]<o[b] do dec(b);
aux:=o[a]; o[a]:=o[b]; o[b]:=aux;
inc(a); ia:=1;
if b>a then
begin
while o[a]<o[b] do inc(a);
aux:=o[a]; o[a]:=o[b]; o[b]:=aux;
dec(b); ia:=0;
end;
until b<=a;
if ss<a-ia then quick(ss,a-ia);
if a-ia+1<d then quick(a-ia+1,d);
end;
procedure permut(var o:vector);
var q,w:longint;
begin
w:=o[1];
for q:=1 to n-1 do o[q]:=o[q+1];
o[n]:=w;
end;
begin
assign(f,'barman.in');
reset(f);
readln(f,n);
for i:=1 to n do begin read(f,v[i]); o[i]:=v[i];end;
close(f);
quick(1,n);
min:=32000;
for i:=1 to n do
begin
j:=1;
c:=0;
fillchar(s,sizeof(s),0);
while j<=n do
begin
while (v[j]=o[j])and(j<=n) do inc(j);
if v[j]<>o[j] then
begin
k:=j;
while ((k<n)and((v[k]=o[k])or(v[j]<>o[k])or(o[j]<>v[k])))or(s[k]=1) do
inc(k);
if (k<=n)and(s[k]=0) then c:=c+40+k-j;
s[k]:=1;
s[j]:=1;
inc(j);
end;
end;
permut(o);
if (c<min)and(c<>0) then min:=c;
end;
assign(g,'barman.out'); rewrite(g); writeln(g,min); close(g);
end.