제출 #841603

#제출 시각아이디문제언어결과실행 시간메모리
841603WLZAwesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
72 ms21792 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const vector<int> dx = {-1, 0, 1, 0}; const vector<int> dy = {0, 1, 0, -1}; int main() { ios::sync_with_stdio(false); cin.tie(0); map<char, int> mp; mp['N'] = 0; mp['E'] = 1; mp['S'] = 2; mp['W'] = 3; int m, n; cin >> m >> n; auto idx = [n](int i, int j) { return i * n + j; }; vector<string> grid(m); for (int i = 0; i < m; i++) { cin >> grid[i]; } vector< vector< pair<int, int> > > g(m * n); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == 'X') { continue; } int cur = mp[grid[i][j]]; int tmp = idx(i, j); for (int k = 0; k < 4; k++) { int ni = i + dx[cur]; int nj = j + dy[cur]; cur++; if (cur == 4) { cur = 0; } if (ni < 0 || ni >= m || nj < 0 || nj >= n) { continue; } g[tmp].push_back({idx(ni, nj), k}); } } } vector<int> dist(m * n, INF); dist[0] = 0; priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > pq; pq.push({0, 0}); while (!pq.empty()) { int u = pq.top().second; int d = pq.top().first; pq.pop(); if (d > dist[u]) { continue; } for (auto& v : g[u]) { if (d + v.second < dist[v.first]) { dist[v.first] = d + v.second; pq.push({dist[v.first], v.first}); } } } if (dist[m * n - 1] == INF) { cout << -1 << '\n'; return 0; } cout << dist[m * n - 1] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...