Cod sursa(job #67699)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 25 iunie 2007 13:26:23
Problema Sate Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda Finala, Clasa a 10-a Marime 2.6 kb
var n,x,y:integer;
    m,dist,c,g,i,j:longint;
    a,cautare,gasit:array[1..3,1..100024] of 0..20000000;
    ok:boolean;
    f,gg:text;
procedure relatii;
begin
c:=0;
for i:=1 to g-1 do
  for j:=i+1 to g do begin
    if gasit[1,i]<>gasit[1,j] then begin
      if (gasit[1,j]<=gasit[2,i]) and (gasit[1,j]<>x) then begin
        c:=c+1;
        cautare[1,c]:=gasit[1,j];
        cautare[2,c]:=gasit[2,i];
        if cautare[3,c]=0 then cautare[3,c]:=gasit[3,i]+gasit[3,j]else cautare[3,c]:=cautare[3,c]-gasit[3,j];
      end;
      if (gasit[1,i]<=gasit[2,j]) and (gasit[1,i]<>x) then begin
        c:=c+1;
        cautare[1,c]:=gasit[1,i];
        cautare[2,c]:=gasit[2,j];
        if cautare[3,c]=0 then cautare[3,c]:=gasit[3,i]+gasit[3,j]else cautare[3,c]:=cautare[3,c]-gasit[3,j];
      end;
      if(gasit[2,i]<=gasit[1,j]) and (gasit[1,j]<>x) then begin
        c:=c+1;
        cautare[1,c]:=gasit[2,i];
        cautare[2,c]:=gasit[1,j];
        if cautare[3,c]=0 then cautare[3,c]:=gasit[3,i]+gasit[3,j]else cautare[3,c]:=cautare[3,c]-gasit[3,j];
      end;
      if (gasit[2,j]<=gasit[1,i]) and (gasit[1,i]<>x) then begin
        c:=c+1;
        cautare[1,c]:=gasit[2,j];
        cautare[2,c]:=gasit[1,i];
        if cautare[3,c]=0 then cautare[3,c]:=gasit[3,i]+gasit[3,j]else cautare[3,c]:=cautare[3,c]-gasit[3,j];
      end;
      if (gasit[1,c]=gasit[2,c]) and (gasit[1,i]<gasit[1,j]) then begin
        c:=c+1;
        cautare[1,c]:=gasit[1,i];
        cautare[2,c]:=gasit[1,j];
      end;
      if (gasit[1,c]=gasit[2,c]) and (gasit[1,i]>gasit[1,j]) then begin
        c:=c+1;
        cautare[1,c]:=gasit[1,i];
        cautare[2,c]:=gasit[1,j];
      end;
    end;
  end;
end; {end la procedura }
begin
assign(f,'sate.in'); reset(f);
assign(gg,'sate.out'); rewrite(gg);
read(f,n,m,x,y);
for i:=1 to m do read(f,a[1,i],a[2,i],a[3,i]);
ok:=false;
cautare[1,1]:=x;
cautare[2,1]:=y;
c:=1; g:=0;
dist:=0;
while not ok do begin
  g:=0;
  for i:=1 to c do begin
    for j:=1 to n do begin
      if (a[1,j]=cautare[1,i]) and (a[2,j]<>cautare[2,i]) then begin
         g:=g+1;
         gasit[1,g]:=a[1,j];
         gasit[2,g]:=a[2,j];
         gasit[3,g]:=cautare[3,i];
      end;
      if (a[2,j]=cautare[2,i]) and (a[1,j]<>cautare[1,i]) then begin
        g:=g+1;
        gasit[1,g]:=a[1,j];
        gasit[2,g]:=a[2,j];
        gasit[3,g]:=cautare[3,i];
      end;
      if (a[1,j]=cautare[1,i]) and (a[2,j]=cautare[2,i]) then begin
        cautare[3,g]:=cautare[3,g]-a[3,j];
        ok:=true;
      end;
    end;
  relatii;
  end;
end;
write(gg,cautare[3,g]);
close(gg);
end.