Cod sursa(job #137438)

Utilizator DiaconuDiaconu Loredana Diaconu Data 17 februarie 2008 12:11:42
Problema Garaj Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda 4, Clasa a 9-a Marime 1.19 kb
type sir=record
     tim,can:integer;
     end;
var     v,z:array[1..100000] of sir;
        f,g:text;
        i:integer;
        j,min,m,y,n,s,x:longint;

procedure  intercl(m,st,dr:integer);
var   a,b,c,i:integer;
begin
a:=st;
b:=m+1;
c:=st;
z:=v;
while (a<=m) and (b<=dr) do begin
 if v[a].tim>v[b].tim then begin
  z[c]:=v[b];
  inc(c);
  inc(b);
 end
 else begin
  z[c]:=v[a];
  inc(c);
  inc(a);
 end;
end;
for i:=a to m do begin
 z[c]:=v[i];
 inc(c);
end;
for i:=b to dr do begin
 z[c]:=v[i];
 inc(c);
end;
v:=z;
end;

procedure  merge(st,dr:integer);
var  m:integer;
begin
m:=(st+dr) div 2;
 if st<dr then begin
  merge (st,m);
  merge (m+1,dr);
  intercl (m,st,dr);
 end;
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
 read (f,v[i].can,y);
 v[i].tim:=y*2;
 s:=s+v[i].can;
end;
merge (1,n);
x:=m div s;
if (m mod s)<>0 then inc(x);
for i:=1 to n do
min:=(x*v[n].tim);
writeln (g,min div 2);
for i:=n downto 1 do begin
 if m>0 then inc(j);
 y:=min div v[i].tim;
 m:=m-v[i].can*y;
end;
writeln (g,j);
close(f);
close(g);
end.