Cod sursa(job #197586)

Utilizator DeadEyeNaiba Mihai Lucian DeadEye Data 5 iulie 2008 11:21:03
Problema Reconst Scor 50
Compilator fpc Status done
Runda Junior Challenge 2008 Marime 1.31 kb
var f,g:text; da:boolean;
    x,y,z,nx:array[1..2000] of longint;
    nr,n,i,j,m,nn,s:longint;
begin
    assign(f,'reconst.in'); reset(f);
    assign(g,'reconst.out'); rewrite(g);
    read(f,n,m);
    for i:=1 to m do
       read(f,x[i],y[i],z[i]);
    for i:=1 to m-1 do
       for j:=i+1 to m do
          if (x[i]>x[j]) or ((x[i]=x[j]) and (y[i]>y[j]))
             then
                begin
                   nr:=x[i]; x[i]:=x[j]; x[j]:=nr;
                   nr:=y[i]; y[i]:=y[j]; y[j]:=nr;
                   nr:=z[i]; z[i]:=z[j]; z[j]:=nr;
                end;
    for i:=1 to m-1 do
       if (x[i]=x[i+1]) and (y[i]=y[i+1]-1)
          then nx[y[i+1]]:=z[i+1]-z[i]
          else if (x[i]=x[i+1]-1) and (y[i]=y[i+1])
             then nx[x[i]]:=z[i]-z[i+1];
    da:=false;
    repeat
       for i:=1 to m do
          begin
             s:=0; nn:=0;
             for nr:=x[i] to y[i] do
                if nx[nr]<>0 then s:=s+nx[nr] else inc(nn);
             if nn=1
                then
                   for nr:=x[i] to y[i] do
                      if nx[nr]=0 then begin nx[nr]:=z[i]-s; break; end;
          end;
       da:=true;
       for i:=1 to n do if nx[i]=0 then begin da:=false; break; end;
    until da;
    for i:=1 to n do write(g,nx[i],' ');
    close(f); close(g);
end.