제출 #344780

#제출 시각아이디문제언어결과실행 시간메모리
344780jjjAwesome Arrowland Adventure (eJOI19_adventure)C++14
50 / 100
2079 ms18436 KiB
#include <bits/stdc++.h> #define MAXN 510 using namespace std; vector < vector <pair <int , int> > > g; vector <string> s; int p[MAXN * MAXN], d[MAXN * MAXN]; bool b[MAXN * MAXN]; void f(int n, int m) { for(int i = 0; i < n * m; i++) { d[i] = -1; p[i] = -1; } d[0] = 0; // p[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; p[g[u][j].first] = u; } } } } 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}); } } } } f(n, m); /* for(int i = 0; i <= n * m - 1; i++) { int l = g[i].size(); for(int j = 0; j < l; j++) cout << "(" << g[i][j].first << ", " << g[i][j].second << ") "; cout << "\n"; } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) cout << d[i * m + j] << " "; cout << "\n"; } /* for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) cout << p[i * m + j] << " "; cout << "\n"; } */ cout << d[n * m - 1]; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

adventure.cpp:141:1: warning: "/*" within comment [-Wcomment]
  141 | /*
      |
#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...