Submission #1299766

#TimeUsernameProblemLanguageResultExecution timeMemory
1299766vladimirfilipTracks in the Snow (BOI13_tracks)C++20
56.67 / 100
457 ms210304 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define int long long using namespace std; using namespace __gnu_pbds; template<typename T> using ordered_multiset = tree< T, null_type, std::less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; void solve() { int h, w; cin >> h >> w; vector<string> grid(h); for (int i = 0; i < h; i++) cin >> grid[i]; vector dist(h, vector<int>(w, 0)); deque<pair<int, int>> d; dist[0][0] = 1; d.emplace_back(0, 0); vector<int> dx{0, 0, 1, -1}; vector<int> dy{1, -1, 0, 0}; int res = 0; while (!d.empty()) { auto [x, y] = d.front(); d.pop_front(); res = max(res, dist[y][x]); for (int i = 0; i < 4; i++) { int _x = x + dx[i], _y = y + dy[i]; if (_x < 0 || _x >= h || _y < 0 || _y >= w || grid[_y][_x] == '.' || dist[_y][_x] != 0) continue; if (grid[y][x] != grid[_y][_x]) { dist[_y][_x] = dist[y][x] + 1; d.emplace_back(_x, _y); } else { dist[_y][_x] = dist[y][x]; d.emplace_front(_x, _y); } } } cout << res << endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; // cin >> t; while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...