Submission #1232823

#TimeUsernameProblemLanguageResultExecution timeMemory
1232823billylolwkwkAwesome Arrowland Adventure (eJOI19_adventure)C++20
100 / 100
47 ms8884 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define vec vector #define pll pair<ll,ll> #define fr first #define sc second #define dbg(x) cout<<#x<<" = "<<x<<endl struct dt{ ll x,y,dist; }; const vec<pll>off={{-1,0},{0,1},{1,0},{0,-1},{-1,0},{0,1},{1,0}}; const ll INF=LLONG_MAX; ll n,m; vec<vec<char>>g; vec<vec<ll>>d; bool chk(const ll x, const ll y){if(x<=0||x>n||y<=0||y>m)return false;return true;} struct com{ bool operator()(const dt&a, const dt&b){ return a.dist>b.dist; } }; priority_queue<dt,vec<dt>,com>pq; // Djikstra algorithm signed main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n>>m; g=vec<vec<char>>(n+1,vec<char>(m+1)); d=vec<vec<ll>>(n+1,vec<ll>(m+1,INF)); for(ll i=1;i<=n;i++)for(ll j=1;j<=m;j++)cin>>g[i][j]; pq.push({1,1,0}); while(!pq.empty()){ dt cur=pq.top();pq.pop(); ll x=cur.x,y=cur.y,dist=cur.dist,offset; // Offset jika g[i][j]=='N' if(d[x][y]<=dist)continue;d[x][y]=dist; char dir=g[x][y];if(dir=='X')continue; // Ya gak usah dilanjutin if(dir=='N')offset=0; else if(dir=='E')offset=1; else if(dir=='S')offset=2; else if(dir='W')offset=3; for(ll i=offset;i<offset+4;i++){ ll xx=x+off[i].fr;ll yy=y+off[i].sc; // Pergi kesebelahnya if(!chk(xx,yy))continue; // Keluar dari map if(d[xx][yy]>dist+i-offset)pq.push({xx,yy,dist+i-offset}); } } if(d[n][m]==INF)cout<<-1;else cout<<d[n][m];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...