Cod sursa(job #163475)

Utilizator chelaru_t_achelaru traian andrei chelaru_t_a Data 22 martie 2008 13:03:49
Problema Progresii Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda Finala, Clasa a 9-a Marime 1.59 kb
type prog=record
          pozitie:longint;
          viteza:longint;
          end;
vector=array [1..1000] of prog;
var n,m,k,l,i:longint;
ok:boolean;
v:vector;
f,g:text;
procedure citire(var n,m,k,l:longint;var v:vector);
var i:longint;
begin
readln(f,n,m,k,l);
for i:=1 to n do readln(f,v[i].pozitie);
end;
procedure succ(a,b,l:longint;var c:longint);
var i:longint;
begin
i:=a;
c:=0;
repeat
c:=c+1;
i:=i+b;
until i>l;
end;
procedure suc(v:vector;n,m,k,l:longint;var ok:boolean);
var i,j,c:longint;
begin
i:=0;
j:=0;
ok:=true;
repeat
i:=i+1;
succ(v[i].pozitie,v[i].viteza,l,c);
if c>=k then ok:=false
else begin
     j:=j+c;
     if j>k then ok:=false;
     end;
until (i=n) or (not ok);
end;
begin
assign(f,'progresii.in');
assign(g,'progresii.out');
reset(f);
rewrite(g);
citire(n,m,k,l,v);
for i:=1 to n do v[i].viteza:=1;
repeat
suc(v,n,m,k,l,ok);
if not ok then begin
               i:=n;
               ok:=true;
               repeat
               if v[i].viteza<>v[i-1].viteza then begin
                                                 v[i-1].viteza:=v[i-1].viteza+1;
                                                 ok:=false;
                                                 end;
               i:=i-1
               until (i=1) or (not ok);
               if i=1 then begin
                           v[n].viteza:=v[n].viteza+1;
                           ok:=false;
                           end;
               end;
until (ok) or (v[n].viteza>m);
if ok then for i:=1 to n do writeln(g,v[i].viteza)
else write(g,'-1');
close(f);
close(g);
end.