Submission #804569

#TimeUsernameProblemLanguageResultExecution timeMemory
804569tlnk07Patkice (COCI20_patkice)C++17
30 / 50
2 ms2772 KiB
#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 + 1) ans = 'E'; else if(c == start - m) ans = 'N'; else if(c == start + m) ans = 'S'; else ans = 'W'; } 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...