Submission #875615

#TimeUsernameProblemLanguageResultExecution timeMemory
875615hmm789Maze (JOI23_ho_t3)C++14
51 / 100
2000 ms2097152 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define INF 1000000000000000000 #define MOD 998244353 int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int r, c, n, sr, sc, gr, gc; cin >> r >> c >> n >> sr >> sc >> gr >> gc; sr--; sc--; gr--; gc--; string s[r]; for(int i = 0; i < r; i++) cin >> s[i]; vector<pair<pair<int, int>, int>> adj[r][c]; int dx[4] = {-1, 0, 0, 1}; int dy[4] = {0, -1, 1, 0}; for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { for(int k = 0; k < 4; k++) { int nx = i+dx[k], ny = j+dy[k]; if(nx < 0 || nx >= r || ny < 0 || ny >= c) continue; if(s[nx][ny] == '#') continue; adj[i][j].push_back({{nx, ny}, 0}); } for(int k = -(n-1); k <= n-1; k++) { for(int l = 0; l < 4; l++) { int nx = i+dx[l]*n+k*dy[l], ny = j+dy[l]*n+k*dx[l]; if(nx < 0 || nx >= r || ny < 0 || ny >= c) continue; adj[i][j].push_back({{nx, ny}, 1}); } } } } for(int i = -n; i <= n; i++) { for(int j = -n; j <= n; j++) { if(abs(i*j) == n*n || i == 0 && j == 0) continue; int nx = gr+i, ny = gc+j; if(nx < 0 || nx >= r || ny < 0 || ny >= c) continue; adj[nx][ny].push_back({{gr, gc}, 1}); } } deque<pair<int, pair<int, int>>> dq; int dist[r][c]; memset(dist, -1, sizeof(dist)); dist[sr][sc] = 0; dq.push_front({0, {sr, sc}}); while(!dq.empty()) { pair<int, pair<int, int>> cur = dq.front(); dq.pop_front(); if(cur.first != dist[cur.second.first][cur.second.second]) continue; for(auto it : adj[cur.second.first][cur.second.second]) { if(dist[it.first.first][it.first.second] == -1 || dist[it.first.first][it.first.second] > cur.first+it.second) { dist[it.first.first][it.first.second] = cur.first+it.second; if(it.second == 0) dq.push_front({cur.first+it.second, it.first}); else dq.push_back({cur.first+it.second, it.first}); } } } cout << dist[gr][gc]; }

Compilation message (stderr)

Main.cpp: In function 'int32_t main()':
Main.cpp:37:42: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   37 |             if(abs(i*j) == n*n || i == 0 && j == 0) continue;
      |                                   ~~~~~~~^~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...