Submission #1150730

#TimeUsernameProblemLanguageResultExecution timeMemory
1150730gapplebeeTracks in the Snow (BOI13_tracks)C++20
100 / 100
750 ms119096 KiB
#include <bits/stdc++.h> using namespace std; int drow[4] = {0, 1, 0, -1}; int dcol[4] = {1, 0, -1, 0}; const int MAX_W = 4000; int depth[MAX_W][MAX_W]; // 0-indexed char snow[MAX_W][MAX_W]; // 0-indexed int h, w; bool check(int row, int col) { return row >= 0 && row < h && col >= 0 && col < w && !depth[row][col] && snow[row][col] != '.'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> h >> w; for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { cin >> snow[i][j]; } } int min_tracks = 1; deque<int> deq = {0, 0}; depth[0][0] = 1; while (deq.size()) { int row = deq.front(); deq.pop_front(); int col = deq.front(); deq.pop_front(); for (int i = 0; i < 4; ++i) { int new_row = row + drow[i]; int new_col = col + dcol[i]; if (check(new_row, new_col)) { if (snow[row][col] == snow[new_row][new_col]) { depth[new_row][new_col] = depth[row][col]; deq.push_front(new_col); deq.push_front(new_row); } else { depth[new_row][new_col] = depth[row][col] + 1; min_tracks = max(min_tracks, depth[new_row][new_col]); deq.push_back(new_row); deq.push_back(new_col); } } } } cout << min_tracks << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...