| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1350885 | candi_ositos | Awesome Arrowland Adventure (eJOI19_adventure) | C++20 | 62 ms | 30464 KiB |
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin>>n>>m;
vector <vector <pair <int, int> > > g(n*m, vector <pair <int, int> > (4, {-1, -1}));
for(int i=0; i<n; ++i){
string aux;
cin>>aux;
for(int j=0; j<m; ++j){
char k=aux[j];
int p=0;
if(k=='N'){
p=0;
}
else if(k=='E'){
p=1;
}
else if(k=='S'){
p=2;
}
else if(k=='W'){
p=3;
}
else{
continue;
}
if(i){
g[i*m+j][0]={(i-1)*m+j, (4-p)%4};
}
if(j<m-1){
g[i*m+j][1]={i*m+j+1, (5-p)%4};
}
if(i<n-1){
g[i*m+j][2]={(i+1)*m+j, (6-p)%4};
}
if(j){
g[i*m+j][3]={i*m+j-1, (7-p)%4};
}
}
}
vector <int> mn(n*m, -1);
mn[0]=0;
set <pair <int, int> > q;
q.insert({0, 0});
while(q.size()){
pair <int, int> v;
for(auto &j: q){
v=j;
break;
}
if(v.f>mn[v.s]){
q.erase(v);
continue;
}
q.erase(v);
for(int i=0; i<4; ++i){
if(g[v.s][i].f!=-1){
if(mn[g[v.s][i].f]>mn[v.s]+g[v.s][i].s || mn[g[v.s][i].f]==-1){
mn[g[v.s][i].f]=mn[v.s]+g[v.s][i].s;
q.insert({mn[g[v.s][i].f], g[v.s][i].f});
}
}
}
}
cout<<mn[n*m-1]<<"\n";
return 0;
}| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
