Submission #1306387

#TimeUsernameProblemLanguageResultExecution timeMemory
1306387gaspadTracks in the Snow (BOI13_tracks)C++20
100 / 100
545 ms208956 KiB
#include <bits/stdc++.h> #define int long long using namespace std; typedef vector<int> vi; typedef pair<int, int> ii; int n, m; vector<vector<char>> mtx; vector<vector<int>> depth; deque<ii> q; // dr, dc, mov tuple<int, int, char> moves[]{{1, 0, 'D'}, {-1, 0, 'U'}, {0, 1, 'R'}, {0, -1, 'L'}}; bool is_possible(ii pos){ auto [r, c] = pos; if(r < 0 || r >= n || c < 0 || c >= m) return false; return true; } int bfs(ii src){ int qtt = 1; q.emplace_back(src); while(!q.empty()){ ii curr = q.back(); q.pop_back(); qtt = max(qtt, depth[curr.first][curr.second]); for(auto [dr, dc, mov] : moves){ int new_r = curr.first + dr; int new_c = curr.second + dc; if(is_possible({new_r, new_c})){ if(depth[new_r][new_c] != 0) continue; if(mtx[new_r][new_c] == '.') continue; if(mtx[new_r][new_c] == mtx[curr.first][curr.second]){ depth[new_r][new_c] = depth[curr.first][curr.second]; q.emplace_back(new_r, new_c); } else{ depth[new_r][new_c] = depth[curr.first][curr.second] + 1; q.emplace_front(new_r, new_c); } } } } return qtt; } void solve(){ // int n, m; cin >> n >> m; vector<ii> cands; mtx.assign(n, vector<char>(m)); depth.assign(n, vector<int>(m, 0)); for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin >> mtx[i][j]; } } depth[0][0] = 1; int ans = bfs({0, 0}); cout << ans << "\n"; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...