Submission #344838

#TimeUsernameProblemLanguageResultExecution timeMemory
344838jjjAwesome Arrowland Adventure (eJOI19_adventure)C++14
100 / 100
112 ms19436 KiB
#include <bits/stdc++.h> #define MAXN 510 #define fi first #define se second using namespace std; vector < vector <pair <int , int> > > g; vector <string> s; int d[MAXN * MAXN]; bool b[MAXN * MAXN]; set <pair <int, int> > q; void dijkstra(int n, int m) { for(int i = 0; i < n * m; i++) d[i] = -1; d[0] = 0; q.insert({0, 0}); while(!q.empty()) { int u = q.begin() -> se; q.erase(q.begin()); int l = g[u].size(); for(int i = 0; i < l; i++) { if(d[g[u][i].fi] == -1 || d[u] + g[u][i].se < d[g[u][i].fi]) { q.erase({d[g[u][i].fi], g[u][i].fi}); d[g[u][i].fi] = d[u] + g[u][i].se; q.insert({d[g[u][i].fi], g[u][i].fi}); } } } } void f(int n, int m) { for(int i = 0; i < n * m; i++) d[i] = -1; d[0] = 0; for(int i = 0; i <= n * m; i++) { int u = -1; for(int j = 0; j < n * m; j++) if(!b[j] && d[j] >= 0 && (u == -1 || d[j] < d[u])) u = j; if(u == -1) break; b[u] = true; int l = g[u].size(); for(int j = 0; j < l; j++) if(!b[g[u][j].first] && (d[g[u][j].first] == -1 || d[g[u][j].first] > d[u] + g[u][j].second)) d[g[u][j].first] = d[u] + g[u][j].second; } } string c; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m; cin >> n >> m; g.resize(n * m); for(int i = 0; i < n; i++) { cin >> c; s.push_back(c); } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(i < n - 1) { int k; if(s[i][j] != 'X') { if(s[i][j] == 'S') k = 0; if(s[i][j] == 'E') k = 1; if(s[i][j] == 'N') k = 2; if(s[i][j] == 'W') k = 3; g[i * m + j].push_back({(i + 1) * m + j, k}); } if(s[i + 1][j] != 'X') { if(s[i + 1][j] == 'N') k = 0; if(s[i + 1][j] == 'W') k = 1; if(s[i + 1][j] == 'S') k = 2; if(s[i + 1][j] == 'E') k = 3; g[(i + 1) * m + j].push_back({i * m + j, k}); } } if(j < m - 1) { int k; if(s[i][j] != 'X') { if(s[i][j] == 'E') k = 0; if(s[i][j] == 'N') k = 1; if(s[i][j] == 'W') k = 2; if(s[i][j] == 'S') k = 3; g[i * m + j].push_back({i * m + j + 1, k}); } if(s[i][j + 1] != 'X') { if(s[i][j + 1] == 'W') k = 0; if(s[i][j + 1] == 'S') k = 1; if(s[i][j + 1] == 'E') k = 2; if(s[i][j + 1] == 'N') k = 3; g[i * m + j + 1].push_back({i * m + j, k}); } } } } dijkstra(n, m); cout << d[n * m - 1]; 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...