Submission #1048848

#TimeUsernameProblemLanguageResultExecution timeMemory
1048848Hamed_GhaffariMaze (JOI23_ho_t3)C++17
100 / 100
411 ms68564 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using pii = pair<int, int>; using pll = pair<long long, long long>; using ull = unsigned long long; #define X first #define Y second #define SZ(x) int(x.size()) #define all(x) x.begin(), x.end() #define mins(a,b) (a = min(a,b)) #define maxs(a,b) (a = max(a,b)) #define pb push_back #define Mp make_pair #define lc id<<1 #define rc lc|1 #define mid ((l+r)/2) mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll INF = 1e9 + 23; int R, C, N, sr, sc, er, ec; vector<vector<char>> a; int dx[4] = {-1, 0, 1, 0}; int dy[4] = {0, 1, 0, -1}; vector<vector<int>> dis; bool in(int x, int y) { return 0<=x&&x<R && 0<=y&&y<C; } void BFS() { queue<pair<pii, pii>> q1, q2; dis[sr][sc] = 0; q1.push(Mp(Mp(sr, sc), Mp(0, 0))); while(SZ(q1)+SZ(q2)) { while(SZ(q1)) { auto [x, y] = q1.front().X; q1.pop(); for(int d=0; d<4; d++) { int xx = x+dx[d], yy = y+dy[d]; if(!in(xx, yy)) continue; if(a[xx][yy] == '.') { if(dis[xx][yy]>dis[x][y]) { dis[xx][yy] = dis[x][y]; q1.push(Mp(Mp(xx, yy), Mp(0, 0))); } } else { if(dis[xx][yy]>dis[x][y]+1) { dis[xx][yy] = dis[x][y]+1; q2.push(Mp(Mp(xx, yy), Mp(N-1, N-1))); } } } } while(SZ(q2)) { auto [x, y] = q2.front().X; auto [xd, yd] = q2.front().Y; q2.pop(); if(min(xd, yd) == 0) q1.push(Mp(Mp(x, y), Mp(0, 0))); for(int d=0; d<4; d++) { int xx = x+dx[d], yy = y+dy[d]; int xxd = xd - (dx[d]!=0), yyd = yd - (dy[d]!=0); if(!in(xx, yy) || xxd < 0 || yyd < 0) continue; if(dis[xx][yy]>dis[x][y]) { dis[xx][yy] = dis[x][y]; q2.push(Mp(Mp(xx, yy), Mp(xxd, yyd))); } } } } } void Main() { cin >> R >> C >> N; cin >> sr >> sc >> er >> ec; sr--; sc--; er--; ec--; a = vector<vector<char>>(R, vector<char>(C)); dis = vector<vector<int>>(R, vector<int>(C, INF)); for(int r=0; r<R; r++) for(int c=0; c<C; c++) cin >> a[r][c]; BFS(); cout << dis[er][ec] << '\n'; } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); int T = 1; // cin >> T; while(T--) Main(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...