Pagini recente » Cod sursa (job #1984391) | Cod sursa (job #1096655) | Cod sursa (job #2960547) | Cod sursa (job #3160581) | Cod sursa (job #789605)
Cod sursa(job #789605)
type ak47=^element;
element = record
nr,pret:longint;
raport:real;
leg:ak47;
end;
var p,r,prim:ak47;s,min,pr,n,x:longint;f,g:text;
begin
assign(f,'energii.in');
assign(g,'energii.out');
reset(f);
readln(f,n);readln(f,x);
prim:=nil;
for s:=1 to n do begin
new(r);
readln(f,r^.nr,r^.pret);
r^.raport:=r^.pret/r^.nr;
p:=prim;
if prim=nil then begin
r^.leg:=prim;
prim:=r;
end
else
if ((r^.raport<p^.raport) or ((r^.raport=p^.raport) and (r^.nr<=p^.nr))) then begin
r^.leg:=p;
prim:=r;
end
else begin
min:=0;
while (p^.leg<>nil) and (min=0) do
if (r^.raport>p^.leg^.raport) then p:=p^.leg
else min:=-1;
min:=0;
while (p^.leg<>nil) and (min=0) do
if (r^.nr>p^.leg^.nr) and (r^.raport=p^.leg^.raport)then p:=p^.leg
else min:=-1;
r^.leg:=p^.leg; p^.leg:=r;
end;
end;
close(f);
p:=prim;s:=0;pr:=0;
while (s<x) and (p<>nil) do begin
if p^.nr+s<=x then begin
s:=s+p^.nr;
pr:=pr+p^.pret;
p:=p^.leg;
end
else begin
min:=p^.pret; n:=p^.nr; p:=p^.leg;
while p<>nil do begin
if p^.nr>=x-s then
if min<p^.pret then begin
min:=p^.pret;
n:=p^.nr;
end;
p:=p^.leg;
end;
pr:=pr+min;
s:=s+n;
end;
end;
rewrite(g); write(s);
if s>=x then write(g,pr)
else write(g,'-1');
close(g);
p:=prim;
while p<>nil do begin
writeln(p^.nr, ' ' , p^.pret, ' ',p^.raport:0:3);
p:=p^.leg;
end;
end.