天天看點

輸油管道_紀中1432_暴力

Description

  請你幫忙設計一個從城市M到城市Z的輸油管道,現在已經把整個區域劃分為R行C列,每個單元格可能是空的也可能是以下7種基本管道之一:

  

輸油管道_紀中1432_暴力

  油從城市M流向Z,‘+’型管道比較特殊,因為石油必須在兩個方向(垂直和水準)上傳輸,如下圖所示:

  現在恐怖分子弄到了輸油管道的設計圖,并把其中一個單元格中的管道偷走了,請你幫忙找到偷走的管道的位置以及形狀。

Input

  第一行包含兩個整數R和C(1<=R,C<=25)。

  接下來R行每行C個字元描述被偷之後的形狀,字元分為以下三種:

  (1)‘.’表示空;

  (2)字元‘|’(ASCII為124)、‘-’、‘+’、‘1’、‘2’、‘3’、‘4’描述管道的形狀;

  (3)‘M’和‘Z’表示城市,兩個都是隻出現一次。

  輸入保證石油的流向是唯一的,隻有一個管道跟M和Z相連,除此此外,保證沒有多餘的管道,也就是說所有的管道在加進被偷的管道後一定都會被用上。

  輸入保證有解而且是唯一的。

Output

  輸出被偷走的管道的行号和列号以及管道的類型。

分析

第一眼看上去很難,但是水花四溢

因為r和c很小,是以怎麼亂搞都行

枚舉所有空地,分不同情況判斷目前位置是否要放,放什麼就行了

code

var
  n,m:longint;
  a:array[..,..]of char;
procedure main;
var
  i,j:longint;
begin
  for i:= to n do
  for j:= to m do
  if a[i,j]='.' then
  begin
    if ((a[i-,j]='|')or(a[i-,j]='1')or(a[i-,j]='4')or(a[i-,j]='+'))
    and((a[i+,j]='|')or(a[i+,j]='2')or(a[i+,j]='3')or(a[i+,j]='+'))
    and((a[i,j-]='-')or(a[i,j-]='1')or(a[i,j-]='2')or(a[i,j-]='+'))
    and((a[i,j+]='-')or(a[i,j+]='3')or(a[i,j+]='4')or(a[i,j+]='+')) then
    begin
      writeln(i,' ',j,' +');
      halt;
    end;
    if ((a[i,j-]='-')or(a[i,j-]='+')or(a[i,j-]='1')or(a[i,j-]='2'))
    and((a[i,j+]='-')or(a[i,j+]='+')or(a[i,j+]='4')or(a[i,j+]='3')) then
    begin
      writeln(i,' ',j,' -');
      halt;
    end;
    if ((a[i-,j]='|')or(a[i-,j]='+')or(a[i-,j]='1')or(a[i-,j]='4'))
    and((a[i+,j]='|')or(a[i+,j]='+')or(a[i+,j]='2')or(a[i+,j]='3')) then
    begin
      writeln(i,' ',j,' |');
      halt;
    end;
    if ((a[i+,j]='|')or(a[i+,j]='+')or(a[i+,j]='2')or(a[i+,j]='3'))
    and((a[i,j+]='-')or(a[i,j+]='+')or(a[i,j+]='3')or(a[i,j+]='4')) then
    begin
      writeln(i,' ',j,' 1');
      halt;
    end;
    if ((a[i-,j]='|')or(a[i-,j]='+')or(a[i-,j]='1')or(a[i-,j]='4'))
    and((a[i,j+]='-')or(a[i,j+]='+')or(a[i,j+]='3')or(a[i,j+]='4')) then
    begin
      writeln(i,' ',j,' 2');
      halt;
    end;
    if ((a[i,j-]='-')or(a[i,j-]='+')or(a[i,j-]='1')or(a[i,j-]='2'))
    and((a[i-,j]='|')or(a[i-,j]='+')or(a[i-,j]='1')or(a[i-,j]='4')) then
    begin
      writeln(i,' ',j,' 3');
      halt;
    end;
    if ((a[i,j-]='-')or(a[i,j-]='+')or(a[i,j-]='2')or(a[i,j-]='1'))
    and((a[i+,j]='|')or(a[i+,j]='+')or(a[i+,j]='3')or(a[i+,j]='2')) then
    begin
      writeln(i,' ',j,' 4');
      halt;
    end;
  end;
end;
procedure init;
var
  i,j:Longint;
  s:string;
begin
  readln(n,m);
  for i:= to n do
  begin
    for j:= to m do
      read(a[i,j]);
    readln;
  end;
end;
begin
  init;
  main;
end.