Cod sursa(job #42779)

Utilizator cimiCristina Stancu-Mara cimi Data 29 martie 2007 15:23:38
Problema Shop Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.21 kb
const
  lim=50;
var
  v:array[1..lim] of int64;
  p,c:array[1..lim] of int64;
  base,i,j,n:longint;
  sol,s,k,l:int64;
  cate:array[1..lim] of int64;

procedure Sort(l, r: longint);
var
  i, j : longint;
  x, y : int64;
begin
  i := l; j := r; x := v[(l+r) DIV 2];
  repeat
    while v[i] < x do i := i + 1;
    while x < v[j] do j := j - 1;
    if i <= j then
    begin
      y := v[i]; v[i] := v[j]; v[j] := y;
      y := c[i]; c[i] := c[j]; c[j] := y;
      y := p[i]; p[i] := p[j]; p[j] := y;
      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;

function min(a,b:int64):int64;
begin
  if a<b
    then min:=a
    else min:=b;
end;

begin
  assign(input,'shop.in');
  reset(input);
  readln(n,base,l);
  for i:=1 to n do
  begin
    read(k,c[i]);
    v[i]:=1;
    for j:=1 to k do
      v[i]:=v[i]*base;
    p[i]:=i;
  end;
  sort(1,n);
  close(input);
  s:=l;  sol:=0;
  for i:=n downto 1 do
  begin
    k:=min(s div v[i],c[i]);
    s:=s-k*v[i];
    cate[p[i]]:=k;
    sol:=sol+k;
  end;
  assign(output,'shop.out');
  rewrite(output);
  writeln( sol);
  for i:=1 to n do write(cate[i],' ');
  close(output);
end.