Cod sursa(job #603533)

Utilizator gicu_01porcescu gicu gicu_01 Data 17 iulie 2011 01:25:42
Problema Energii Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.18 kb
var a:array[1..2,1..1000]of integer;
    b:array[1..1000]of real;
    n,s,k:integer;

procedure init;
var f:text; i:integer;
begin
 assign(f,'energii.in');
 reset(f);
 readln(f,n);
 readln(f,s);
 for i:=1 to n do
  begin
   readln(f,a[1,i],a[2,i]);
   b[i]:=a[2,i]/a[2,i];
  end;
 close(f);
end;

procedure sw(var a,b:integer);
var t:integer;
begin
 t:=a;a:=b;b:=t;
end;

procedure sw2(var a,b:real);
var t:real;
begin
 t:=a;a:=b;b:=t;
end;


procedure qs(left,right:integer);
var i,j:integer;p:real;
begin
 i:=left; j:=right; p:=b[(i+j) div 2];
 while i<j do
  begin
   while b[i]<p do inc(i);
   while b[j]>p do dec(j);
   if i<=j then begin sw(a[1,i],a[1,j]);sw(a[2,i],a[2,j]);sw2(b[i],b[j]);inc(i); dec(j); end;
  end;
 if i<right then qs(i,right);
 if j>left then qs(left,j);
end;

procedure calc;
var i:integer;
begin
 k:=0;
 for i:=1 to n do
  begin
   while a[1,i]<=s do
    begin
     k:=k+a[2,i];
     s:=s-a[1,i];
    end;
  end;
end;


procedure afis;
var i:integer; f:text;
begin
 assign(f,'energii.out');
 rewrite(f);
{ if s=0 then writeln(f,k) else} writeln(f,'-1');
 close(f);
end;

begin
 init;
 qs(1,n);
 afis;
end.