Cod sursa(job #57326)

Utilizator gurneySachelarie Bogdan gurney Data 1 mai 2007 19:25:47
Problema Lapte Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.88 kb
program lapte;
  const
    fin='lapte.in';
    fout='lapte.out';
    nmax=100;
type
  milk=record
    a,b:integer;
    end;
var
  a:array[1..nmax] of milk;
  st,dr,mid,n,t,tmax,i,j,x,y:integer;

procedure qsort(st,dr:integer);
  var
    i,j,x:integer;
    aux:milk;
  begin
    i:=st;j:=dr;
    x:=a[(st+dr)shr 1].b;
    repeat
      while a[j].b>x do
        dec(j);
      while a[i].b<x do
        inc(i);
      if i<=j then
        begin
          aux:=a[i];a[i]:=a[j];a[j]:=aux;
          inc(i);dec(j);
        end;
    until i>j;
    if j>st then
      qsort(st,j);
    if i<dr then
      qsort(i,dr);
  end;

function check(tmax:integer):boolean;
  var
    c1,c2,c:integer;
  begin
    c1:=0;c2:=0;
    for i:=1 to n do
      inc(c1,tmax div a[i].a);
    if c1>=t then
    for i:=1 to n do
      begin
        c:=(c1-t);
        if c>tmax div a[i].a then
          c:=tmax div a[i].a;
        inc(c2,(c*a[i].a+tmax mod a[i].a)div a[i].b);
        dec(c1,c);
      end;
    check:=(c1>=t)and(c2>=t);
  end;

procedure scrie(tmax:integer);
  var
    c1,c2,c:integer;
  begin
    c1:=0;c2:=0;
    for i:=1 to n do
      inc(c1,tmax div a[i].a);
    for i:=1 to n do
      begin
        c:=(c1-t);
        if c>tmax div a[i].a then
          c:=tmax div a[i].a;
        writeln(((tmax div a[i].a)-c),' ',(c*a[i].a+tmax mod a[i].a)div a[i].b);
        inc(c2,(c*a[i].a+tmax mod a[i].a)div a[i].b);
        dec(c1,c);
      end;
  end;

begin
  assign(input,fin);
    reset(input);
    readln(n,t);
    for i:=1 to n do
      readln(a[i].a,a[i].b);
  assign(output,fout);
    rewrite(output);
    qsort(1,n);
    st:=1;dr:=100;
    while st<dr do
      begin
        mid:=(st+dr)shr 1;
        if check(mid) then
          dr:=mid
        else
          st:=mid+1;
      end;
    writeln(st);
    scrie(st);
  close(output);
end.