Submission #953734

#TimeUsernameProblemLanguageResultExecution timeMemory
953734KakarotTracks in the Snow (BOI13_tracks)C++98
0 / 100
80 ms159268 KiB
#include <bits/stdc++.h> #define int int64_t using namespace std; void setIO() { cin.tie(0)->sync_with_stdio(0); } bool inside(int x, int y, int n, int m, vector<string> &grid) { return (x > -1 && x < n && y > -1 && y < m && grid[x][y] != '.'); } void solve() { //cout << "zco"; int n, m; cin >> n >> m; vector<string> grid(n); for(auto &x : grid) cin >> x; deque<pair<int, int>> dq; dq.push_back({0, 0}); vector<vector<int>> depth(n, vector<int>(n, 1e18)); depth[0][0] = 0; vector<int> di { -1, 0, 1, 0} , dj { 0, 1, 0, -1}; //auto inside = [](int x, int y, int &n, int &m) { return (x > -1 && x < n && y > -1 && y < m); }; int ans = 1; while(!dq.empty()) { auto u = dq.front(); dq.pop_front(); ans = max(ans, depth[u.first][u.second]); for(int i = 0; i < 4; i++) { int x = u.first+di[i], y = u.second+dj[i]; if(inside(x, y, n, m, grid) && (depth[x][y] + (grid[x][y] != grid[u.first][u.second])) < depth[x][y]) { depth[x][y] = depth[u.first][u.second] + (grid[u.first][u.second] != grid[x][y]); if(grid[u.first][u.second] != grid[x][y]) dq.push_back({x, y}); else dq.push_front({x, y}); } } } cout << ans+1; } int32_t main() { setIO(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...