Cod sursa(job #163553)
Utilizator | Data | 22 martie 2008 14:46:36 | |
---|---|---|---|
Problema | Progresii | Scor | 0 |
Compilator | fpc | Status | done |
Runda | preONI 2008, Runda Finala, Clasa a 9-a | Marime | 2.58 kb |
program progresii;
var f,g:text;
n,m,total,update,k:int64;
l:int64;
speed:array [1..100001] of int64;
p:array[1..100001] of int64;
procedure iofile;
var i:longint;
begin
assign(f,'progresii.in');reset(f);
assign(g,'progresii.out');rewrite(g);
readln(f,n,m,k,l);
total:=0;
for i:=1 to n do
begin
read(f,p[i]);
speed[i]:=1;
total:=total+(l-p[i]) +1;
end;
close(f);
end;
function decilitri (length,speed:int64):int64;
begin
decilitri:=(length div speed) +1;
end;
procedure cbin(p,u,leng,target:int64);
var mij,sum:int64;
begin
if p<=u then
begin
mij:=(p+u) div 2;
sum:=decilitri(leng,mij);
if sum<=target then
begin
update:=mij;
cbin(p,mij-1,leng,target);
end else
cbin(mij+1,u,leng,target);
end;
end;
procedure solve;
var ntotal,without:int64;
i:longint;
begin
for i:=n downto 1 do
begin
ntotal:=total-decilitri(l-p[i],1)+decilitri(l-p[i],m);
if ntotal>k then
begin
speed[i]:=m;
total:=ntotal;
end else
begin
without:=total-decilitri(l-p[i],1);
update:=m;
cbin(1,m,l-p[i],k-without);
speed[i]:=update;
total:=ntotal;
break;
end;
end;
if total<=k then
begin
for i:=1 to n do
writeln(g,speed[i]);
close(g);
end else
begin
writeln(g,-1);
close(g);
end;
end;
begin
iofile;
solve;
end.