#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
unordered_map<char, unordered_map<char, int>> cost;
int main()
{
cost['N']['N'] = cost['E']['E'] = cost['S']['S'] = cost['W']['W'] = 0;
cost['N']['E'] = cost['E']['S'] = cost['S']['W'] = cost['W']['N'] = 1;
cost['N']['S'] = cost['E']['W'] = cost['S']['N'] = cost['W']['E'] = 2;
cost['N']['W'] = cost['E']['N'] = cost['S']['E'] = cost['W']['S'] = 3;
cost['X']['N'] = cost['X']['E'] = cost['X']['S'] = cost['X']['W'] = 10000000;
int n, m; cin >> n >> m;
vector<string> v(n);
for (string &s : v) cin >> s;
vector<vector<int>> dp(n, vector<int> (m, 100000));
dp[0][0] = 0;
dp[1][0] = cost[v[0][0]]['S'];
for (int i = 1; i < m; i++)
{
dp[0][i] = min(dp[0][i-1] + cost[v[0][i-1]]['E'], dp[1][i-1] + cost[v[1][i-1]]['E'] + cost[v[1][i]]['N']);
dp[1][i] = min(dp[1][i-1] + cost[v[1][i-1]]['E'], dp[0][i-1] + cost[v[0][i-1]]['E'] + cost[v[0][i]]['S']);
}
cout << (dp[n-1][m-1] >= 10000 ? -1 : dp[n-1][m-1]) << '\n';
return 0;
}
// int main()
// {
// int n, m, k; cin >> n >> m;
// vector<string> g(n);
// for (string &s : g) cin >> s;
// vector<vector<vector<int>>> dp(n, vector<vector<int>> (m, vector<int> (k)));
// }
# | 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... |