제출 #750243

#제출 시각아이디문제언어결과실행 시간메모리
750243MuntherCarrotAwesome Arrowland Adventure (eJOI19_adventure)C++14
100 / 100
183 ms30896 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long // #define int long long #define endl '\n' #define all(x) x.begin(),x.end() const ll MOD = 1e9 + 7, SZ = 1e5 + 10, INF = 1e18; vector<vector<int>> vtx(SZ); int cst[4][4] = { {0, 1, 2, 3}, //N {3, 0, 1, 2}, //E {2, 3, 0, 1}, //S {1, 2, 3, 0} //W // N E S W }; int32_t main(){ // ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; char arr[n][m]; for(auto &I : arr){ for(char &i : I) cin >> i; } int nds[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++) nds[i][j] = i * m + j; } vector<vector<pair<int, int>>> mtx(n * m); // int mtx[n*m][n*m]; // memset(mtx, -1, sizeof mtx); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ int y = nds[i][j]; int d; if(arr[i][j] == 'X') continue; if(arr[i][j] == 'N') d = 0; if(arr[i][j] == 'E') d = 1; if(arr[i][j] == 'S') d = 2; if(arr[i][j] == 'W') d = 3; if(j > 0) mtx[y].push_back({cst[d][3], nds[i][j - 1]}); if(i > 0) mtx[y].push_back({cst[d][0], nds[i - 1][j]}); if(j + 1 < m) mtx[y].push_back({cst[d][1], nds[i][j + 1]}); if(i + 1 < n) mtx[y].push_back({cst[d][2], nds[i + 1][j]}); } } // for(int i=0;i<n * m;i++){ // for(int j=0;j<n * m;j++) // if(mtx[i][j] != -1)cout << mtx[i][j] << ' '; // cout << endl; // } priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q; q.push({0, 0}); vector<int> ans(n * m, INT_MAX); bool vis[n * m] = {}; while(!q.empty()){ auto u = q.top(); q.pop(); if(vis[u.second]) continue; // cout << u. first << ' ' << u.second << endl; vis[u.second] = 1; ans[u.second] = u.first; for(auto i : mtx[u.second]){ // cout << i << ' '<< mtx[u.second][i] + u.first << endl; q.push({i.first + u.first, i.second}); } } // for(int i=0;i<m*n;i++) // cout << ans[i] << ' '; cout << (ans[n * m - 1] == INT_MAX ? -1 : ans[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...