Submission #1252393

#TimeUsernameProblemLanguageResultExecution timeMemory
1252393onur8ocakAwesome Arrowland Adventure (eJOI19_adventure)C++20
50 / 100
2096 ms29508 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(){ 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; priority_queue<int> q; q.push(0); vector<int> dp(300005,inf); dp[0]=0; while(!q.empty()){ int node=q.top(); q.pop(); for(auto u:edges[node]){ if(u.second==inf){ continue; } if(dp[u.first]>dp[node]+u.second){ //cout << dp[u.first] << " " << dp[node] << " " << u.second << endl; q.push(u.first); dp[u.first]=dp[node]+u.second; } } } /*for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout << dp[i*m+j] << " "; } cout << endl; }*/ if(dp[n*m-1]==inf){ cout << -1 << endl; } else{ cout << dp[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...