Cod sursa(job #37859)
Utilizator | Data | 25 martie 2007 12:53:47 | |
---|---|---|---|
Problema | Shop | Scor | 100 |
Compilator | fpc | Status | done |
Runda | preONI 2007, Runda 4, Clasa a 9-a si gimnaziu | Marime | 4.16 kb |
program shop;
var f,g:text;
n:longint;
v:array[1..31] of qword;
c:array[1..31] of qword;
b:array[1..31] of qword;
poz:array[1..31] of byte;
l:qword;
af,p,j,i:longint;
min:qword;
procedure iofile;
var i,j:longint;
x:longint;
p:qword;
begin
assign(f,'shop.in');
reset(f);
assign(g,'shop.out');
rewrite(g);
readln(f,n,af,l);
for i:=1 to n do
begin
readln(f,x,c[i]);
p:=1;
for j:=1 to x do
p:=p*af;
v[i]:=p;
poz[i]:=i;
end;
close(f);
end;
{procedure afis;
var s:qword;
i,j,p:longint;
begin
s:=0;
for i:=1 to n do
s:=s+b[i];
if s<min then
begin
min:=s;
vmin:=b;
end;
end; }
procedure pozitie(var m:longint;p,u:longint);
var i,j,di,dj,aux:longint;
aux1:qword;
begin
i:=p;
j:=u;
di:=0;
dj:=-1;
while i<j do
begin
if v[i]<v[j] then
begin
aux:=di;
di:=-dj;
dj:=-aux;
aux:=poz[i];
poz[i]:=poz[j];
poz[j]:=aux;
aux1:=c[i];
c[i]:=c[j];
c[j]:=aux1;
aux1:=v[i];
v[i]:=v[j];
v[j]:=aux1;
end;
i:=i+di;
j:=j+dj;
end;
m:=i;
end;
procedure quick(p,u:longint);
var m:longint;
begin
if p<u then
begin
pozitie(m,p,u);
quick(p,m-1);
quick(m+1,u);
end;
end;
{procedure prel(k:longint;s:qword);
var i:qword;
p,min:qword;
begin
if k=n+1 then
begin
if s=0 then
begin
afis;
end;
end else
begin
p:=0;
min:=s div v[k];
if c[k]<min then min:=c[k];
i:=min+1;
while i>0 do
begin
dec(i);
p:=i*v[k];
c[k]:=c[k]-i;
b[k]:=b[k]+i;
prel(k+1,s-p);
c[k]:=c[k]+i;
b[k]:=b[k]-i;
end;
end;
end; }
procedure greedy;
var i:longint;
s,min:qword;
begin
s:=l;
for i:=1 to n do
begin
min:=s div v[i];
if c[i]<min then
min:=c[i];
b[i]:=min;
s:=s-min*v[i];
end;
end;
begin
iofile;
quick(1,n);
fillchar(b,sizeof(b),0);
greedy;
min:=0;
for i:=1 to n do
min:=min+b[i];
writeln(g,min);
for i:=1 to n do
begin
for j:=1 to n do
if poz[j]=i then
begin
p:=j;
break;
end;
write(g,b[p],' ');
end;
close(g);
end.