Submission #1188633

#TimeUsernameProblemLanguageResultExecution timeMemory
1188633andrei_nAwesome Arrowland Adventure (eJOI19_adventure)C++20
38 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; enum {X, N, E, S, W}; const int INF = 9999999; int dir[128]; int v[505][505]; int dp[505][2]; inline int dist(int a, int b) { if(a == X) return INF; return (a <= b ? b-a : b-a+4); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; char ch; dir['N'] = N; dir['E'] = E; dir['S'] = S; dir['W'] = W; dir['X'] = X; for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j) { cin>>ch; v[i][j] = dir[ch]; } dp[1][0] = 0; dp[1][1] = INF; for(int i=1; i<m; ++i) { dp[i+1][0] = min(dp[i][0], dp[i][1] + dist(v[2][i], N)) + dist(v[1][i], E); dp[i+1][1] = min(dp[i][1], dp[i][0] + dist(v[1][i], S)) + dist(v[2][i], E); } if(n == 1) { cout<<(dp[m][0] >= INF ? -1 : dp[m][0]); } else { int res = min(dp[m][1], dp[m][0] + dist(v[1][m], S)); cout<<(res >= INF ? -1 : res); } 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...