Cod sursa(job #37819)

Utilizator marius21Marius Petcu marius21 Data 25 martie 2007 12:44:01
Problema Shop Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.79 kb
type rec=record
	v:int64;
   p,nr,fol:longint;
   end;
var min,l:int64;
i,j,n,c:longint;
a:array[1..30] of rec;
f,g:text;

procedure poz(var m:longint; vi,vf:longint);
var i,j,mi,mj,aux2:longint;
        aux:rec;
begin
i:=vi;
j:=vf;
mi:=0;
mj:=-1;
while i<j do begin
        if a[i].v<a[j].v then begin
                aux:=a[i];
                a[i]:=a[j];
                a[j]:=aux;
                aux2:=mi;
                mi:=-mj;
                mj:=-aux2;
        end;
        inc(i,mi);
        inc(j,mj);
end;
m:=i;
end;

procedure quick(vi,vf:longint);
var m:longint;
begin
if vi<vf then begin
        poz(m,vi,vf);
        quick(vi,m-1);
        quick(m+1,vf);
end;
end;

procedure poz2(var m:longint; vi,vf:longint);
var i,j,mi,mj,aux2:longint;
        aux:rec;
begin
i:=vi;
j:=vf;
mi:=0;
mj:=-1;
while i<j do begin
        if a[i].p<a[j].p then begin
                aux:=a[i];
                a[i]:=a[j];
                a[j]:=aux;
                aux2:=mi;
                mi:=-mj;
                mj:=-aux2;
        end;
        inc(i,mi);
        inc(j,mj);
end;
m:=i;
end;

procedure quick2(vi,vf:longint);
var m:longint;
begin
if vi<vf then begin
        poz2(m,vi,vf);
        quick(vi,m-1);
        quick(m+1,vf);
end;
end;

begin
assign(f,'shop.in');
assign(g,'shop.out');
reset(f);
rewrite(g);
read(f,n,c,l);
for i:=1 to n do begin
	read(f,a[i].v,a[i].nr);
   a[i].v:=trunc(exp(a[i].v*ln(c)));
   a[i].p:=i;
   end;
quick(1,n);
i:=1;
while a[i].v*a[i].nr <l do begin
	a[i].fol:=a[i].nr;
   l:=l-a[i].v*a[i].nr;
   min:=min+a[i].nr;
   inc(i);
   end;
j:=a[i].nr;
while a[i].v*i>l do
	dec(j);
a[i].fol:=j;
inc(min,j);
writeln(g,min);
quick2(1,n);
for i:=1 to n do write(g,a[i].fol,' ');
close(f);
close(g);
end.