Pagini recente » Cod sursa (job #2341209) | Cod sursa (job #3125017) | Cod sursa (job #3266915) | Cod sursa (job #920651) | Cod sursa (job #42173)
Cod sursa(job #42173)
program shop;
type vect=array[1..30] of int64;
var poz,a,b,use:vect;
f,g:text;
n,c,i,q,total:int64;
sum,prod:int64;
{}
procedure Sort(l, r: Integer);
var
i, j, x, y: integer;
begin
i := l; j := r; x := a[(l+r) DIV 2];
repeat
while a[i] < x do i := i + 1;
while x < a[j] do j := j - 1;
if i <= j then
begin
y := a[i]; a[i] := a[j]; a[j] := y;
y := b[i]; b[i] := b[j]; b[j] := y;
y := poz[i]; poz[i] := poz[j]; poz[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;
{}
procedure citire;
begin
assign(f,'shop.in'); reset(f);
assign(g,'shop.out'); rewrite(g);
read(f,n,c,sum);
for i:=1 to n do begin read(f,a[i],b[i]);
poz[i]:=i;
end;
end;
{}
begin
citire;
sort(1,n);
total:=0;
for i:=n downto 1 do begin
prod:=1;
for q:=1 to a[i] do prod:=prod*c; {1 moneda}
if b[i]<sum div prod then begin
use[poz[i]]:=b[i];
sum:=sum-b[i]*prod;
total:=total+use[poz[i]];
end
else begin
use[poz[i]]:=sum div prod;
sum:=sum-use[poz[i]]*prod;
total:=total+use[poz[i]];
end;
if sum=0 then break;
end;
writeln(g,total);
for i:=1 to n-1 do write(g,use[i],' ');
writeln(g,use[n],' ');
close(f); close(g);
end.