Submission #1276130

#TimeUsernameProblemLanguageResultExecution timeMemory
1276130voidptrTracks in the Snow (BOI13_tracks)C++20
100 / 100
647 ms212764 KiB
#include "bits/stdc++.h" #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define mod 1000000007 #define mod2 998244353 using namespace std; using namespace __gnu_pbds; template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; bool inside(ll y, ll x, ll n, ll m) { return (y < n && y >= 0 && x < m && x >= 0); } void solve() { ll n, m; cin >> n >> m; vector<string> a(n); for(int i = 0; i < n; ++i) { cin >> a[i]; } vector<vector<ll>> dist(n, vector<ll>(m, -1)); vector<ll> yMove = {1, 0, -1, 0}; vector<ll> xMove = {0, 1, 0, -1}; dist[0][0] = 1; deque<pair<ll, ll>> dq; dq.push_front({0, 0}); while(!dq.empty()) { auto [y, x] = dq.front(); dq.pop_front(); for(int i = 0; i < 4; ++i) { ll newY = y + yMove[i]; ll newX = x + xMove[i]; if(inside(newY, newX, n, m)) { if(dist[newY][newX] != -1 || a[newY][newX] == '.') continue; if(a[y][x] != a[newY][newX]) { dist[newY][newX] = dist[y][x] + 1; dq.push_back({newY, newX}); }else { dist[newY][newX] = dist[y][x]; dq.push_front({newY, newX}); } } } } ll ans = 0; for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { ans = max(ans, dist[i][j]); // cout << dist[i][j] << " "; } // cout << "\n"; } cout << ans << "\n"; } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...