Cod sursa(job #63324)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 27 mai 2007 20:54:35
Problema Lapte Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.05 kb
var n,l,i,poz,j:byte;
    a,b,c:array[1..100] of real;
    act1,act2:array[1..100] of integer;
    ok:boolean;
    s,s1,mp,va,vb,ramas,z,vas,vbs,t,vl1,vl2:real;
    f,g:text;
begin
assign(f,'lapte.in'); reset(f);
assign(g,'lapte.out'); rewrite(g);
read(f,n,l);
for i:=1 to n do begin
  read(f,a[i],b[i]);
  a[i]:=1/a[i];
  b[i]:=1/b[i];
  c[i]:=a[i]/b[i];
  vl1:=vl1+a[i];
  vl2:=vl2+b[i];
end;
ok:=true;
repeat
  ok:=true;
  for i:=1 to n-1 do if c[i]<c[i+1] then begin
                                           ok:=false;
                                           z:=a[i];
                                           a[i]:=a[i+1];
                                           a[i+1]:=z;
                                           z:=b[i];
                                           b[i]:=b[i+1];
                                           b[i+1]:=z;
                                           z:=c[i];
                                           c[i]:=c[i+1];
                                           c[i+1]:=z;
                                         end;
until ok=true;
for i:=1 to n do s:=s+c[i];
s1:=0;
mp:=s;
poz:=n;
while abs(s-2*s1)<=mp do begin
  mp:=s-2*s1;
  s1:=s1+c[poz];
  poz:=poz-1;
end;
poz:=poz+1;
for i:=1 to poz do va:=va+a[i];
for i:=poz+1 to n do vb:=vb+b[i];
t:=0;
if va<vb then begin
  t:=trunc(l/vb);
  if l/vb<>trunc(l/vb) then t:=t+1;
  i:=n+1;
  while ramas<l-(t-1)*vb do begin
    i:=i-1;
    ramas:=ramas+b[i];
  end;
  if i>poz then for j:=i-1 downto poz+1 do vas:=vas+a[j];
  ramas:=l-va*(t-1);
  va:=va+vas;
  ramas:=ramas-va;
  if ramas/vl1=trunc(ramas/vl1) then t:=t+ramas/vl1  else t:=t+trunc(ramas/vl1)+1;
end
else begin
  t:=trunc(l/va);
  i:=poz+1;
  if l/va<>trunc(l/va) then t:=t+1;
  while ramas<l-(t-1)*va do begin
    i:=i-1;
    ramas:=ramas+a[i];
  end;
  if i>1 then for j:=i-1 downto 1 do vbs:=vbs+b[j];
  ramas:=l-vb*(t-1);
  vb:=vb+vbs;
  ramas:=ramas-vb;
  if ramas/vl2=trunc(ramas/vl2) then t:=t+ramas/vl2 else t:=t+trunc(ramas/vl2)+1;
end;
write(g,t:0:0);
close(g);
end.