【题目描述】
给一个 n×m 的网格图,左上角坐标为 (1,1),右下角坐标为 (n,m)。其中有一部分格子上有障碍物。
在网格的上方,有 a 个机器人。可以将它们看作位于第 0 行,则第 i 个机器人的坐标为 (0,pi) 。
在网格的下方,有 b 个出口。可以将它们看作位于第 n+1 行,则第 i 个出口的坐标为 (n+1,ei) 。
机器人都只会向前走。初始时,每个机器人都朝向正下方。
现在你可以在某些格子上放置转向器,每个格子上至多放置一台转向器。对于每台转向器,你可以任意选择两个不同的方向(上,下,左,右),将这两个方向用圆滑的轨道连接起来。注意这会将另外两个方向给堵住。比如,如果选择上和右两个方向,则上方来的机器人会转向右边,右方来的机器人会转向上面,而左方和下方来的机器人会被挡住而无法继续运动。
现在你知道了这个网格的布局信息,以及每个机器人和出口的位置。你的任务是找到一种放置转换器的方案,使得每个机器人都会从出口离开该网格图,任意时刻机器人的坐标可以相同。
由于机器人们没有配置检验方案合法的程序,并且你深得机器人们的信任,所以你只需要告诉它们是否存在这样的方案就好了。
【输入格式】
从文件 robot.in 中读入数据。
本题为多组数据,输入数据第一行包含一个整数 T,表示数据组数。
对于每组数据:
第一行包含四个整数 n,m,a,b,分别表示网格长、宽,机器人个数和出口个数。
接下来的 n 行每行包含一个长度为 m 的 01 串,描述了网格的布局。字符为 1 表示该位置有障碍物。
接下来的一行包含 a 个整数表示机器人的初始位置。
接下来的一行包含 b 个整数表示出口位置。
【输出格式】
输出到文件 robot.out 中。
对于每组数据,输出一行 Yes 或 No,表示是否存在一种合法方案。
【样例输入1】
2
3 4 2 2
0000
0011
0000
1 4
2 4
3 4 2 2
0000
0011
0000
3 4
2 4
【样例输出1】
Yes
No
【样例1解释】
对于第一组数据,一号机器人在 (3,1) 转向右边,直到 (3,4) 转向下面。二号机器人在 (1,4) 转向左边,在 (1,2) 转向下面。
对于第二组数据,发现两只机器人至少有一个无法到达 (1,2) ,所以不存在合法方案。
【样例2】
见选手目录下的 robot/robot2.in 与 robot/robot2.ans。
【样例3】
见选手目录下的 robot/robot3.in 与 robot/robot3.ans。
【样例4】
见选手目录下的 robot/robot4.in 与 robot/robot4.ans。
【样例5】
见选手目录下的 robot/robot5.in 与 robot/robot5.ans。
【样例6】
见选手目录下的 robot/robot6.in 与 robot/robot6.ans。
【数据范围】
| 测试点编号 |
n,m≤ |
特殊性质 |
| 1,2 |
100 |
a=1 |
| 3,4 |
b=1 |
| 5,6,7,8 |
3 |
无 |
| 9,10 |
10 |
| 11,12,13,14,15,16,17,18,19,20 |
100 |
对于所有数据,保证:1≤T≤100,1≤n,m≤100,∑n,∑m≤1000,1≤a,b≤m。保证机器人坐标互不相同,出口坐标互不相同。