Cod sursa(job #223182)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 27 noiembrie 2008 14:49:44
Problema Progresii Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.95 kb
var f,g:text;
    a,v:array[0..100010]of longint;
    n,m,k,l,i,s,r:longint;

function verif(x,a,m:longint):boolean;
begin
  if (a div x+1<=m)then verif:=true else verif:=false;
end;


function search(a,b,m:longint):longint;
var r,k:longint;
begin
  r:=-1;
  while (a<=b)do
    begin
      k:=(a+b)div 2;
      if (verif(k,l-v[i],m))then
        begin
          r:=k;
          a:=k+1;
        end else b:=k-1;
    end;
  search:=r;
end;


begin
assign(f,'progresii.in');
assign(g,'progresii.out');
reset(f);
rewrite(g);
read(f,n,m,k,l);
for i:=1 to n do read(f,v[i]);
for i:=1 to n do
  begin
    a[i]:=(l-v[i]) div m+1;
    inc(s,a[i]);
  end;
s:=k-s;
for i:=1 to n do
  begin
    r:=search(a[i],s+a[i],m);
    if (r=-1)then break;
    r:=(l-v[i])div ((l-v[i]) div r+1)+1;
    s:=s-r+a[i];
    a[i]:=(l-v[i])div r+1;

  end;
if (r=-1)then write(g,r)else
for i:=1 to n do writeln(G,a[i]);
close(f);
close(g);
end.