输油管道_纪中1432_暴力

55 篇文章 0 订阅
53 篇文章 0 订阅

Description

  请你帮忙设计一个从城市M到城市Z的输油管道,现在已经把整个区域划分为R行C列,每个单元格可能是空的也可能是以下7种基本管道之一:
  描述
  油从城市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[0..26,0..26]of char;
procedure main;
var
  i,j:longint;
begin
  for i:=1 to n do
  for j:=1 to m do
  if a[i,j]='.' then
  begin
    if ((a[i-1,j]='|')or(a[i-1,j]='1')or(a[i-1,j]='4')or(a[i-1,j]='+'))
    and((a[i+1,j]='|')or(a[i+1,j]='2')or(a[i+1,j]='3')or(a[i+1,j]='+'))
    and((a[i,j-1]='-')or(a[i,j-1]='1')or(a[i,j-1]='2')or(a[i,j-1]='+'))
    and((a[i,j+1]='-')or(a[i,j+1]='3')or(a[i,j+1]='4')or(a[i,j+1]='+')) then
    begin
      writeln(i,' ',j,' +');
      halt;
    end;
    if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='1')or(a[i,j-1]='2'))
    and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='4')or(a[i,j+1]='3')) then
    begin
      writeln(i,' ',j,' -');
      halt;
    end;
    if ((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4'))
    and((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='2')or(a[i+1,j]='3')) then
    begin
      writeln(i,' ',j,' |');
      halt;
    end;
    if ((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='2')or(a[i+1,j]='3'))
    and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='3')or(a[i,j+1]='4')) then
    begin
      writeln(i,' ',j,' 1');
      halt;
    end;
    if ((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4'))
    and((a[i,j+1]='-')or(a[i,j+1]='+')or(a[i,j+1]='3')or(a[i,j+1]='4')) then
    begin
      writeln(i,' ',j,' 2');
      halt;
    end;
    if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='1')or(a[i,j-1]='2'))
    and((a[i-1,j]='|')or(a[i-1,j]='+')or(a[i-1,j]='1')or(a[i-1,j]='4')) then
    begin
      writeln(i,' ',j,' 3');
      halt;
    end;
    if ((a[i,j-1]='-')or(a[i,j-1]='+')or(a[i,j-1]='2')or(a[i,j-1]='1'))
    and((a[i+1,j]='|')or(a[i+1,j]='+')or(a[i+1,j]='3')or(a[i+1,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:=1 to n do
  begin
    for j:=1 to m do
      read(a[i,j]);
    readln;
  end;
end;
begin
  init;
  main;
end.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值