Cod sursa(job #197665)

Utilizator marius21Petcu Marius marius21 Data 5 iulie 2008 13:43:04
Problema Reconst Scor 15
Compilator fpc Status done
Runda Junior Challenge 2008 Marime 2.65 kb
var a:array[1..2000,1..2000]of longint;
f,g:text;
n,m,ii,jj,i,j,aa,b,s:longint;

function max(t1,t2:longint):longint;
begin
if t1>=t2 then max:=t1 else max:=t2;
end;

function min(t1,t2:longint):longint;
begin
if t1<=t2 then min:=t1 else min:=t2;
end;

procedure sum(aa,b,s:longint);
begin
if a[aa,b]=maxlongint then begin
  a[aa,b]:=s;
  a[b,aa]:=s;
  end;
end;

begin
assign(f,'reconst.in');
assign(g,'reconst.out');
reset(f);
rewrite(g);
read(f,n,m);
for i:=1 to n do
  for j:=1 to n do
    a[i,j]:=maxlongint;
for i:=1 to m do begin
  read(f,aa,b,s);
  sum(aa,b,s);
  end;
for i:=1 to n do
  for j:=i to n do
    if a[i,j]<>maxlongint then
      for ii:=1 to n do
        for jj:=ii to n do
          if a[ii,jj]<>maxlongint then
            begin
            if (i=ii) and (j=jj) then else

            if i=ii then
              sum(max(j,jj),min(j,jj)+1,a[i,max(jj,j)]-a[i,min(jj,j)]) else
            if j=jj then
              sum(max(i,ii)-1,min(i,ii),a[min(ii,i),j]-a[max(ii,i),j]) else

            if jj+1=i then
              sum(ii,j,a[ii,jj]+a[i,j]) else
            if j+1=ii then
              sum(i,jj,a[ii,jj]+a[i,j]) else

            if (jj+1<i) and (a[ii,j]<>maxlongint) then
              sum(jj+1,i-1,a[ii,j]-a[ii,jj]-a[i,j]) else
            if (j+1<ii) and (a[i,jj]<>maxlongint) then
              sum(j+1,ii-1,a[i,jj]-a[ii,jj]-a[i,j]) else

            if (ii<i) and (jj>i) and (ii<j) and (jj>j) then begin
              if a[ii,i-1]<>maxlongint then sum(j+1,jj,a[ii,jj]-a[i,j]-a[ii,i-1]) else
              if a[jj,j+1]<>maxlongint then sum(i-1,ii,a[ii,jj]-a[i,j]-a[jj,j+1]);
              end else
            if (i<ii) and (j>ii) and (i<jj) and (j>jj) then begin
              if a[i,ii-1]<>maxlongint then sum(jj+1,j,a[i,j]-a[ii,jj]-a[i,ii-1]) else
              if a[j,jj+1]<>maxlongint then sum(ii-1,i,a[i,j]-a[ii,jj]-a[j,jj+1]);
              end else

            if (ii<i) and (jj>i) and (jj<j) then begin
              if a[ii,j]<>maxlongint then sum(i+1,jj-1,a[ii,jj]+a[i,j]-a[ii,j]) else
              if a[i+1,jj-1]<>maxlongint then sum(j,ii,a[ii,jj]+a[i,j]-a[i+1,jj-1]);
              end else
            if (i<ii) and (j>ii) and (j<jj) then begin
              if a[i,jj]<>maxlongint then sum(ii+1,j-1,a[i,j]+a[ii,jj]-a[i,jj]) else
              if a[ii+1,j-1]<>maxlongint then sum(jj,i,a[i,j]+a[ii,jj]-a[ii+1,j-1]);
              end
            end;
for i:=1 to n do begin
  for j:=i to n do
    if a[i,j]<>maxlongint then
      break;
  sum(i,i,a[i,j] div (j-i+1));
  if i<>j then
    sum(i+1,j,a[i,j]-a[i,i]);
  write(g,a[i,i],' ');
  end;
writeln(g);
close(f);
close(g);
end.