Pagini recente » Cod sursa (job #1327963) | Cod sursa (job #1444416) | Cod sursa (job #2762979) | Cod sursa (job #1136742) | Cod sursa (job #137517)
Cod sursa(job #137517)
program garaj;
var f,g:text;
c,t:array[1..1001] of longint;
n,tmin,nrmin,dim:longint;
m:qword;
cat:array[1..1001] of qword;
id:array[1..1001] of longint;
procedure iofile;
var i:longint;
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,c[i],t[i]);
id[i]:=i;
end;
close(f);
end;
function cate_max(x,timp:qword):qword;
begin
cate_max:=(timp div (2*t[x]))*c[x];
end;
function se_poate(t:longint):boolean;
var i:longint;
s:qword;
begin
s:=0;
for i:=1 to n do
begin
s:=s+cate_max(i,t);
end;
if s>=m then se_poate:=true else
se_poate:=false;
end;
procedure cbin(p,u:longint);
var m:longint;
begin
if p<=u then
begin
m:=(p+u) div 2;
if se_poate(m) then
begin
tmin:=m;
cbin(p,m-1);
end else
cbin(m+1,u);
end;
end;
procedure repair(i:longint);
var l,r,min:longint;
aux:qword;
begin
l:=i*2;
r:=l+1;
min:=i;
if (l<=dim)and(cat[l]<cat[min]) then min:=l;
if (r<=dim)and(cat[r]<cat[min]) then min:=r;
if min<>i then
begin
aux:=cat[i];
cat[i]:=cat[min];
cat[min]:=aux;
aux:=id[i];
id[i]:=id[min];
id[min]:=aux;
repair(min);
end;
end;
procedure build_heap;
var i:longint;
begin
for i:=n downto 2 do
repair(i);
end;
procedure heapsort;
var i:longint;
aux:qword;
begin
build_heap;
for i:=n downto 2 do
begin
aux:=cat[i];
cat[i]:=cat[1];
cat[1]:=aux;
aux:=id[i];
id[i]:=id[1];
id[1]:=aux;
dec(dim);
repair(1);
end;
end;
procedure solve;
var i:longint;
sc:longint;
begin
sc:=m;
tmin:=maxlongint;
cbin(1,maxlongint-5);
for i:=1 to n do
cat[i]:=cate_max(i,tmin);
dim:=n;
heapsort;
nrmin:=0;
while sc>0 do
begin
inc(nrmin);
if sc>cate_max(id[nrmin],tmin) then
sc:=sc-cate_max(id[nrmin],tmin) else
sc:=0;
end;
writeln(g,tmin,' ',nrmin);
close(g);
end;
begin
iofile;
solve;
end.