从前在月球上有一个机器人。
月球可以看作一个 n*m 的网格图,每个格子有三种可能:空地,障碍,机器人(有且仅有一个),现在地面指挥中心想让机器人在月球上行走,每次可以发送一个指令,为 U-往上走、D-往下走、L-往左走、R-往右走的其中之一。
当机器人接收到一个行走指令时,如果即将到达的位置为障碍物,那么机器人将留在原地,否则机器人向对应方向走一步,如果其走出边界那么立即死亡。
地面指挥中心当然不想让机器人就这么挂掉,因此其定义一个操作序列是安全的,当且仅当机器人按此操作序列走不会死亡。
但是从地球向月球发信息不是个容易的事,而且有时候某些指令还会在茫茫宇宙中被吞没,比如指挥中心传出去 RUR 指令,到机器人那里就可能变成 RR 或者变成 U,因此定义一个操作序列是绝对安全的当且仅当其任意子序列都是安全的。
现在地面指挥中心想知道,对于某一个地图,绝对安全的操作序列最长可以到多少,如果存在一个长度为正无穷的这样的序列,那么输出-1。

输入描述:

第一行一个正整数T,表示数据组数。
接下来一共 T 组数据,每组数据第一行有两个正整数 n,m,表示网格图的大小, 接下来 n 行,每行 m 个字符,表示这张网格图。
其中字符“.”表示空地,“#”表示障碍物,“S”表示机器人所在位置。

输出描述:

一共 T 行,每行一个整数,表示答案。
示例1

输入

复制

3
5 5
#####
#...#
.#S#.
#...#
#####
1 7
S......
5 8
#.######
#.#..S.#
#.#.##.#
#......#
########

输出

复制

-1
6
-1

备注:

数据范围 0≤T,n,m≤50
 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
using namespace std;
#define ll long long
#define N 60
#define gep(i,a,b) for(int i=a;i<=b;i++)
#define mem(a,b) memset(a,b,sizeof(a))
char s[N][N];
int t,n,m;
int dir[][]={,,,-,,,-,};
/*
只要四个方向有一个方向有#,就是正无穷大,因为遇到#会停止,它的
任何子序列也都是安全的
否则(四个方向全是.)
答案就是(n-1)+(m-1)
它的子序列也都是安全的。
*/
int main()
{
scanf("%d",&t);
while(t--)
{
mem(s,);
int x,y;
scanf("%d%d",&n,&m);
gep(i,,n-){
scanf("%s",s[i]);
gep(j,,m-){
if(s[i][j]=='S') x=i,y=j;
}
}
bool flag=;
gep(i,,){
int xx=x,yy=y;
for(int j=;xx>=&&xx<n&&yy>=&&yy<m;j++){
xx+=dir[i][];
yy+=dir[i][];
if(s[xx][yy]=='#'){ flag=;
break;
}
}
if(!flag) break;
}
if(!flag) printf("-1\n");
else{
printf("%d\n",n+m-);
}
}
return ;
}

Wannafly挑战赛21 机器人的更多相关文章

  1. Wannafly挑战赛21:C - 大水题

    链接:Wannafly挑战赛21:C - 大水题 题意: 现在给你N个正整数ai,每个数给出一“好数程度” gi(数值相同但位置不同的数之间可能有不同的好数程度).对于在 i 位置的数,如果有一在j位 ...

  2. Wannafly挑战赛21 E 未来城市规划

    传送门 题目中给的信息很难直接维护,但是可以考虑一条边对答案的贡献 在以\(x\)为根的子树里,如果一条边\(i\)的权值为\(w_i\),这条边深度更深的端点为\(to_i\),那么这条边对这个子树 ...

  3. Wannafly挑战赛21 C 大水题

    https://www.nowcoder.com/acm/contest/159/C dp #include <cstdio> #include <cstdlib> #incl ...

  4. 牛客网 Wannafly挑战赛21 灯塔

    Z市是一座港口城市,来来往往的船只依靠灯塔指引方向.在海平面上,存在n个灯塔.每个灯塔可以照亮以它的中心点为中心的90°范围.特別地, 由于特殊限制,每个灯塔照亮范围的角的两条边必须要么与坐标轴平行要 ...

  5. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

  6. Wannafly挑战赛13 zzf的好矩阵 题解 答案解释

    Wannafly挑战赛13 zzf的好矩阵 题解 文章目录 Wannafly挑战赛13 zzf的好矩阵 题解 分析 结论1 结论2 结论3 C数组对应带子说明 空白长度论述 后续黑色长度论述 能&qu ...

  7. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  8. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  9. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

随机推荐

  1. 数据库操作语法错误(SQL syntax error)之两步走

    今天在做web应用操作数据库时出现了语法错误,提示的是在“xxxxxxx”附近出现了语法错误:CODE:Error: You have an error in your SQL syntax. Che ...

  2. C#里边的控件缩写大全(比较规范)

    标准控件1 btn Button 2 chk CheckBox 3 ckl CheckedListBox 4 cmb ComboBox 5 dtp DateTimePicker 6 lbl Label ...

  3. sqlserver跟据当天年月日日期查询数据库当天数据

    select * from Client where  CONVERT(varchar(100), Cli_Datetime, 23) ='2017-11-06' 在查询之前要对表中datetime类 ...

  4. mui页面间传接值例子

    传值页面index.html <!DOCTYPE html><html><head> <meta charset="utf-8"> ...

  5. apple-touch-icon-precomposed

    <link rel="apple-touch-icon-precomposed" href=""> apple-touch-icon-precomp ...

  6. PLSQL Developer 12 保存登录的用户名和密码

    1. 登录 PLSQL Developer PLSQL Developer > Preferences 2. Preferences > Logon History > Defini ...

  7. django之基于cookie和装饰器实现用户认证

    示例1 # Create your views here. user = "a" pwd = "a" def login(request): if reques ...

  8. MySQL如何找出未提交事务信息

    前阵子,我写了一篇博客"ORACLE中能否找到未提交事务的SQL语句", 那么在MySQL数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢? 实验验证了一下 ...

  9. NullPointerException检测

    APET-NPE插件工作原理 android应用程序编译的过程如下: 从图中,我们可以看出,app编译大致经历了四大阶段:java source files -> .class files -& ...

  10. 2017.10.6 QBXT 模拟赛

    题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...