Cod sursa(job #137272)

Utilizator vladnVlad Nistorica vladn Data 17 februarie 2008 10:45:06
Problema Garaj Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.58 kb
var  tmin:array[1..100010] of integer;
     a:array[1..100010,1..2] of integer;
     f,g:text;
     n,m,i,max,c:longint;
procedure quick(s,d:longint);
var i,j,w:longint;
    x:real;
begin
     i:=s; j:=d; x:=a[(s+d)div 2,2]/a[(s+d)div 2,1];
     repeat
          while a[i,2]/a[i,1]<x do inc(i);
          while a[j,2]/a[i,1]>x do dec(j);
          if i<=j then
          begin
               w:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=w;
               w:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=w;
               inc(i); dec(j);
          end
     until i>j;
     if i<d then quick(i,d);
     if s<j then quick(s,j);
end;
begin
assign(f,'garaj.in');reset(f);
assign(g,'garaj.out');rewrite(g);
readln(f,n,m);
for i:=1 to n do begin
    readln(f,a[i,1],a[i,2]);
    a[i,2]:=2*a[i,2];
end;
quick(1,n);
i:=1;
while m>0 do begin
      if i=1 then begin
          while (tmin[i]<=a[i+1,2]) or (tmin[i]<=tmin[i+1]) do begin
                m:=m-a[i,1];
                tmin[i]:=tmin[i]+a[i,2];
          end;
          inc(i);
          end
          else  begin
                while tmin[i]+a[i,2]<=tmin[i-1] do begin
                     m:=m-a[i,1];
                     tmin[i]:=tmin[i]+a[i,2];
               end;
               if i=n then i:=1 else
                  if (tmin[i-1]+a[i-1,2])<=(tmin[i+1]+a[i+1,2]) then dec(i) else
                     inc(i);
          end;
end;
c:=0;max:=0;
for i:=1 to n do
    if tmin[i]>0 then begin inc(c);
                            if tmin[i]>max then max:=tmin[i];
                       end;
writeln(g,max,' ',c);
close(g);
end.