Submission #1321085

#TimeUsernameProblemLanguageResultExecution timeMemory
1321085matzzTracks in the Snow (BOI13_tracks)C++20
100 / 100
677 ms240020 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, a) for(int i = 0; i < (int) a; i++) #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define F first #define S second #define sz(x) (int)(x).size() #define endl '\n' #define int long long #define mk_p make_pair typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; //int const MAXN = 2e5 + 7; int const MAX = 500010; int const INF = 0x3f3f3f3f; ll const LINF = 0x3f3f3f3f3f3f3f3f; int const MAXN = 200010; const int MOD = 1e9 + 7; const int modz = 998244353; const int MAXCOORD = 32010; const int OFF = 1000020; char grid[4005][4005]; int dist[4005][4005]; vector<pair<int,int>> mov = {{1,0}, {0,1}, {-1,0}, {0,-1}}; int n, m; //check constraints bool val(pair<int,int> u){ return u.F >= 0 and u.S >= 0 and u.F < n and u.S < m and grid[u.F][u.S] != '.'; } int bfs(pair<int,int> s){ memset(dist, 0x3f, sizeof dist); dist[s.F][s.S] = 1; deque<pair<int,int>> dq; dq.pb(s); int ans = 0; while(!dq.empty()){ pair<int,int> v = dq.front(); dq.pop_front(); for(auto u : mov){ u.F += v.F, u.S += v.S; if(val(u)){ if(grid[v.F][v.S] == grid[u.F][u.S]){ if(dist[v.F][v.S] < dist[u.F][u.S]){ dist[u.F][u.S] = dist[v.F][v.S]; dq.push_front(u); } } else{ if(dist[v.F][v.S] + 1 < dist[u.F][u.S]){ dist[u.F][u.S] = dist[v.F][v.S] + 1; dq.push_back(u); } } ans = max(ans, dist[u.F][u.S]); } } } return ans; } void solve(){ cin >> n >> m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> grid[i][j]; } } pii start = {0,0}; cout << bfs(start) << endl; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); int te = 1;// cin >> te; while(te--){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...