이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
long long n, m, start, finish;
string s;
vector<int> vec[100001];
bool check = 0;
char ans;
pair<int, char> mini = {INT_MAX, '0'};
void dfs(int x, int h)
{
if(x == finish)
{
check = 1;
if(mini.first > h) mini = {h, ans};
}
if(check) return;
for(int c : vec[x])
{
if(x == start && h > 0) return;
if(x == start)
{
check = 0;
if(c == start + m) ans = 'S';
else if(c == start + 1) ans = 'E';
else if(c == start - 1) ans = 'W';
else ans = 'N';
}
dfs(c, h + 1);
}
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n; ++i)
{
cin >> s;
for(int j = 0; j < m; ++j)
{
if(s[j] == 'o')
{
start = i * m + j + 1;
if(i < n - 1) vec[i * m + j + 1].push_back(i * m + j + m + 1);
if(j < m - 1) vec[i * m + j + 1].push_back(i * m + j + 2);
if(j > 0) vec[i * m + j + 1].push_back(i * m + j);
if(i > 0) vec[i * m + j + 1].push_back(i * m + j - m + 1);
}
else if(s[j] == 'x') finish = i * m + j + 1;
else if(s[j] == 'v') vec[i * m + j + 1].push_back(i * m + j + m + 1);
else if(s[j] == '>') vec[i * m + j + 1].push_back(i * m + j + 2);
else if(s[j] == '<') vec[i * m + j + 1].push_back(i * m + j);
else if(s[j] == '^') vec[i * m + j + 1].push_back(i * m + j - m + 1);
}
}
dfs(start, 0);
if(mini.first < INT_MAX) cout << ":)\n" << mini.second;
else cout << ":(";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |