#include <bits/stdc++.h>
using namespace std;
vector<string> grid;
vector<vector<bool>> dist;
vector<int> r = {0, -1, 1, 0}, c = {1, 0, 0, -1};
vector<char> possible = {'<', 'v', '^', '>'};
// E N S W
vector<char> moves = {'E', 'N', 'S', 'W'};
int R, S;
vector<pair<int,int>> getPos(int i, int j) {
vector<pair<int, int>> ans;
for (int d = 0; d < 4; d++) {
int ui = i+r[d], uj = j+c[d];
if (ui < 0 || uj < 0 || ui >= R || uj >= S || (grid[ui][uj] != possible[d] && grid[ui][uj] != 'o')) continue;
ans.push_back({ui, uj});
}
return ans;
}
int main () {
int ui = -1, uj = -1, vi, vj;
cin >> R >> S;
grid.resize(R);
dist.assign(R, vector<bool>(S, false));
for (int i = 0; i < R; i++) cin >> grid[i];
for (int i = 0; i < R; i++) {
for (int j = 0; j < S; j++) {
if (grid[i][j] == 'x') {
ui = i;
uj = j;
break;
}
}
if (ui != -1 && uj != -1) break;
}
queue<pair<int, int>> q;
bool found = false;
q.push({ui, uj});
dist[ui][uj] = true;
while (!q.empty()) {
tie(ui, uj) = q.front();
q.pop();
for (auto &[i, j] : getPos(ui, uj)) {
if (dist[i][j]) continue;
if (grid[i][j] == 'o') {
vi = i;
vj = j;
found = true;
break;
}
dist[i][j] = true;
q.push({i, j});
}
if (found) break;
}
if (found) {
cout << ":)\n";
for (int i = 0; i < 4; i++) {
int vii = vi+r[i], vjj = vj+c[i];
if (vii < 0 || vjj < 0 || vii >= R || vjj >= S || dist[vii][vjj] == false) continue;
cout << moves[i];
break;
}
}
else {
cout << ":(";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |