Submission #1082873

#TimeUsernameProblemLanguageResultExecution timeMemory
1082873timoniAwesome Arrowland Adventure (eJOI19_adventure)C++17
22 / 100
67 ms102400 KiB
//don't copy pls) /*TAAK ZDES NADO RECURSIU PISAT*/ //I'm not in the danger i am the DANGER #include "bits/stdc++.h" #include <ext/pb_ds/assoc_container.hpp> #define ll long long #define pb push_back #define int long long #define F first #define S second #define all(x) (x).begin(), (x).end() #define pii pair<int,int> #define sigma signed using namespace std; using namespace __gnu_pbds; const int N = 3e5 + 5; int mod = 1e9 + 7; const int INF = 1e18; int n,m,a[501][501],nei[5],dp[501][501],used[501][501]; vector <pii> g[501][501]; int hm(char c , char y){ if(c == 'X' || y == 'X' || (c == y)){ return 0; } if(c == 'N'){ if(y == 'E'){ return 1; } if(y == 'S'){ return 2; } return 3; } if(c == 'W'){ if(y == 'N'){ return 1; } if(y == 'E'){ return 2; } return 3; } if(c == 'S'){ if(y == 'w'){ return 1; } if(y == 'N'){ return 2; } return 3; } if(c == 'E'){ if(y == 'S'){ return 1; } if(y == 'W'){ return 2; } return 3; } return 0; } char c[501][501]; void dfs(int x , int y){ used[x][y] = 1; for(auto to : g[x][y]){ int v , u; v = to.F , u = to.S; dp[x - 1][y] = min(dp[x - 1][y] , dp[x][y] + hm(c[x][y] , 'N')); dp[x][y - 1] = min(dp[x][y - 1] , dp[x][y] + hm(c[x][y] , 'W')); dp[x + 1][y] = min(dp[x + 1][y] , dp[x][y] + hm(c[x][y] , 'S')); dp[x][y + 1] = min(dp[x][y + 1] , dp[x][y] + hm(c[x][y] , 'E')); dfs(v , u); } } void Gold(){ cin >> n >> m; for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j <= m ; j++){ cin >> c[i][j]; } } if(c[n][m] != 'X'){ cout << "-1"; return; } if(n == 1){ int cnt = 0; for(int i = 1 ; i < m ; i++){ if(c[1][i] == 'X'){ cout << "-1"; return; } char cc = 'E'; cnt += hm(c[1][i] , cc); // cout << cnt << ' '; } cout << cnt; return; } if(m == 1){ int cnt = 0; for(int i = 1 ; i < n ; i++){ if(c[i][1] == 'X'){ cout << "-1"; return; } char cc = 'S'; cnt += hm(c[i][1] , cc); // cout << cnt << ' '; } cout << cnt; return; } for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j <= m ; j++){ dp[i][j] = INF; } } for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j <= m ; j++){ if(c[i][j] == 'N' && i != 1){ g[i][j].pb({i - 1 , j}); } if(c[i][j] == 'W' && j != 1){ g[i][j].pb({i , j - 1}); } if(c[i][j] == 'S' && i != n){ g[i][j].pb({i + 1 , j}); } if(c[i][j] == 'E' && j != m){ g[i][j].pb({i , j + 1}); } } } dp[1][1] = 0; for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j <= m ; j++){ if(dp[i][j] != INF && !used[i][j]){ dfs(i , j); } } } if(dp[n][m] == INF){ cout << "-1"; } else{ cout << dp[n][m]; } } sigma main(){ //freopen("txt.in","r",stdin); //freopen("txt.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0); srand(time(0)); int TT = 1; // cin >> TT; for(int i = 1 ; i <= TT ; i++){ //cout << "Case " << i << ": "; Gold(); } }
#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...