-
Notifications
You must be signed in to change notification settings - Fork 10
/
Codeforces 586D - Phillip and Trains.cpp
62 lines (55 loc) · 1.31 KB
/
Codeforces 586D - Phillip and Trains.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/// Codeforces 586D - Phillip and Trains
/// DFS + thinking
#include <bits/stdc++.h>
using namespace std;
int n,k,srcx,srcy;
char grid[10][120];
bool flg;
int vis[10][120];
bool judge(int x,int y){
return (x >= 0 && x < 3 && (grid[x][y] == '.' || grid[x][y] == 's'));
}
void man_go(int x,int y)
{
vis[x][y] = 1;
if (y >= n - 1){
flg = true;
return;
}
if (flg) return;
/// he will be caught
if (!judge(x,y+1)) return;
if (judge(x,y+1) && judge(x,y+2) && judge(x,y+3) && !vis[x][y+3]) {
man_go(x,y+3);
}
if (judge(x+1,y+1) && judge(x+1,y+2) && judge(x+1,y+3) && !vis[x+1][y+3]) {
man_go(x+1,y+3);
}
if (judge(x-1,y+1) && judge(x-1,y+2) && judge(x-1,y+3) && !vis[x-1][y+3]) {
man_go(x-1,y+3);
}
}
int main()
{
int t;
cin >> t;
while(t--)
{
memset(vis,0,sizeof(vis));
flg = false;
cin >> n >> k;
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < n;j++)
{
cin >> grid[i][j];
if (grid[i][j] == 's') srcx = i,srcy = j;
}
/// for extra memory of dfs
for (int j = n;j < 115;j++) grid[i][j] = '.';
}
man_go(srcx,srcy);
if (flg) cout << "YES\n"; else cout << "NO\n";
}
return 0;
}