Cod sursa(job #39013)

Utilizator andrewgPestele cel Mare andrewg Data 26 martie 2007 12:51:12
Problema Shop Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.43 kb
const maxn = 32;

var f:text;
    n,c,i,j,sol:longint;
    m,k:int64;
    a,b,d,t:array[1..maxn]of int64;

procedure readdata;
begin
   assign(f,'shop.in');
   reset(f);
   readln(f,n,c,m);
   for i:=1 to n do
   begin
      readln(f,a[i],b[i]);
      d[i]:=i;
   end;
   close(f);
end;

procedure sort(l,r:longint);
var i,j,p,q:longint;
begin
   i:=l;
   j:=r;
   p:=a[(l+r) div 2];
   repeat
      while a[i]<p do i:=i+1;
      while p<a[j] do j:=j-1;
      if i<=j then
      begin
         q:=a[i];
         a[i]:=a[j];
         a[j]:=q;
         q:=b[i];
         b[i]:=b[j];
         b[j]:=q;
         q:=d[i];
         d[i]:=d[j];
         d[j]:=q;
         i:=i+1;
         j:=j-1;
      end;
   until i>j;
   if l<j then sort(l,j);
   if i<r then sort(i,r);
end;

procedure solve;
begin
   sort(1,n);
   for i:=1 to n do
   begin
      k:=1;
      for j:=1 to a[i] do k:=k*c;
      a[i]:=k;
   end;
   i:=n;
   while m<>0 do
   begin
      while (m<a[i]) or (b[i]=0) do dec(i);
      while (m>=a[i]) and (b[i]>0) do
      begin
         m:=m-a[i];
         dec(b[i]);
         inc(t[d[i]]);
         inc(sol);
      end;
   end;
end;

procedure writedata;
begin
   assign(f,'shop.out');
   rewrite(f);
   writeln(f,sol);
   for i:=1 to n do
   begin
      write(f,t[i],' ');
   end;
   writeln(f);
   close(f);
end;

begin
   readdata;
   solve;
   writedata;
end.