| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1173312 | achi12344321 | Awesome Arrowland Adventure (eJOI19_adventure) | C++20 | 0 ms | 0 KiB | 
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define rep(i, a, b) for(int i = a; i < b; i++)
#define fastio cin.tie(0)->sync_with_stdio(0)
#define vi vector<int>
vector<char> di = {'N', 'E', 'S', 'W'};
vector<int> r = {-1, 0, 1, 0}, c = {0, 1, 0, -1};
int calTime(char a, char b) {
    int i = 0, ai = 0, bi = 0;
    rep(i, 0, 4) if (di[i] == a) {
        ai = i;
        break;
    }
    rep(i, 0, 4) if (di[i] == b) {
        bi = i;
        break;
    }
    if (ai <= bi) return bi-ai;
    return (bi-ai+4)%4;
}
int main () {
    fastio;
    int m, n;
    cin >> m >> n;
    vector<string> grid(m);
    int i;
    int cnt, x, y;
    rep(i, 0, m) cin >> grid[i];
    vector<vi> rotcnt(m, vi(n, INT_MAX));
    priority_queue<pair<int, pii>> pq;
    pq.push({0, {0, 0}});
    int ux, uy;
    rotcnt[x][y] = 0;
    while (!q.empty()) {
        cnt = pq.top().first;
        tie(x, y) = pq.top().second;
        pq.pop();
        // cout << x << " " << y << " " << cnt << "\n";
        if (grid[x][y] == 'X') continue;
        rep(i, 0, 4) {
            ux = x+r[i];
            uy = y+c[i];
            if (ux < 0 || uy < 0 || ux >= m || uy >= n || rotcnt[ux][uy] <= rotcnt[x][y]+calTime(grid[x][y], di[i])) continue;
            rotcnt[ux][uy] = rotcnt[x][y]+calTime(grid[x][y], di[i]);
            pq.push({rotcnt[ux][uy], {ux, uy}});
        }
    }
    // rep(i, 0, m) {
    //     rep(j, 0,n) {
    //         cout << rotcnt[i][j] << " ";
    //     }
    //     cout << "\n";
    // }
    cout << (rotcnt[m-1][n-1] == INT_MAX ? -1 : rotcnt[m-1][n-1]);
    return 0;
}
// <= in continue;
