제출 #1252414

#제출 시각아이디문제언어결과실행 시간메모리
1252414onur8ocakAwesome Arrowland Adventure (eJOI19_adventure)C++20
100 / 100
77 ms33208 KiB
#include <bits/stdc++.h> #define int long long using namespace std; vector<pair<int,int>> edges[300005]; map<char,int> mp; const int inf=1e9; int fark(char a,char b){ if(a=='X'){ return inf; } int tut=mp[b]-mp[a]; if(tut<0){ tut+=4; } return tut; } void solve(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin >> n >> m; char a[n+5][m+5]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin >> a[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(j<m-1){ edges[i*m+j].push_back({i*m+j+1,fark(a[i][j],'E')}); edges[i*m+j+1].push_back({i*m+j,fark(a[i][j+1],'W')}); } if(i<n-1){ edges[i*m+j].push_back({(i+1)*m+j,fark(a[i][j],'S')}); edges[(i+1)*m+j].push_back({i*m+j,fark(a[i+1][j],'N')}); } } } //cout << fark(a[0][0],'E') << " " << mp['E'] << endl; vector<int> dist(n*m, inf); priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq; dist[0] = 0; pq.emplace(0, 0); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d > dist[u]) continue; for (auto [v, w] : edges[u]) { if (dist[v] > dist[u] + w) { dist[v] = dist[u] + w; pq.emplace(dist[v], v); } } } /*for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout << dp[i*m+j] << " "; } cout << endl; }*/ if(dist[n*m-1]==inf){ cout << -1 << endl; } else{ cout << dist[n*m-1] << endl; } } int32_t main() { mp['N']=0; mp['E']=1; mp['S']=2; mp['W']=3; solve(); 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...