Submission #1350354

#TimeUsernameProblemLanguageResultExecution timeMemory
1350354GabrielAwesome Arrowland Adventure (eJOI19_adventure)C++20
100 / 100
47 ms17012 KiB
#include "bits/stdc++.h"
using namespace std;
struct Nodo{
    int d, x, y;
    Nodo(int D, int X, int Y){
        d = D;
        x = X;
        y = Y;
    }
    
};
bool operator<(const Nodo& a, const Nodo& b){
    if(a.d < b.d) return 1;
    if(a.d > b.d) return 0;
    return make_pair(a.x, a.y) < make_pair(b.x, b.y);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin>>n>>m;
    vector<string> s(n);
    for(int i = 0; i < n; i++){
        cin>>s[i];
        for(int j = 0; j < m; j++){
            if(s[i][j] == 'E') s[i][j] = '0';
            if(s[i][j] == 'S') s[i][j] = '1';
            if(s[i][j] == 'W') s[i][j] = '2';
            if(s[i][j] == 'N') s[i][j] = '3';
        }
    }
    vector< vector<int> > Distancia(n, vector<int>(m, 2222222));
    Distancia[0][0] = 0;
    set<Nodo> Cola;
    Cola.insert(Nodo(0, 0, 0));
    vector<int> cx = {0, 1, 0, -1}, cy = {1, 0, -1, 0};
    while(!Cola.empty()){
        int d = Cola.begin()->d, x = Cola.begin()->x, y = Cola.begin()->y;
        Cola.erase(Cola.begin());
        if(s[x][y] == 'X') continue;
        for(int i = 0; i < 4; i++){
            int nx = x + cx[i], ny = y + cy[i];
            if(nx < 0 or nx >= n or ny < 0 or ny >= m) continue;
            int Extra = (i - (s[x][y] - '0') + 1048576) % 4;
            if(Distancia[nx][ny] > Distancia[x][y] + Extra){
                Distancia[nx][ny] = Distancia[x][y] + Extra;
                Cola.insert(Nodo(Distancia[nx][ny], nx, ny));
            }
        }
    }
    cout<<(Distancia.back().back() == 2222222 ? -1 : Distancia.back().back());
    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...