제출 #1153542

#제출 시각아이디문제언어결과실행 시간메모리
1153542kiwimsyTracks in the Snow (BOI13_tracks)C++20
100 / 100
1421 ms613244 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; ll n, m, ans = 0; vector<string> g; vector<vector<ll>> dist; vector<vector<bool>> vis; void bfs(ll y, ll x){ deque<pair<ll, ll>> q; q.push_back({y, x}); dist[y][x] = 1; while(!q.empty()){ pair<ll, ll> val = q.front(); ll vy = val.first, vx = val.second; q.pop_front(); if(vis[vy][vx]) continue; for(ll dy = (vy > 0 ? -1 : 0); dy <= (vy < n-1 ? 1 : 0); dy++){ if(g[vy+dy][vx] != '.' && vis[vy+dy][vx] == false){ if(g[vy][vx] == g[vy+dy][vx]){ q.push_front({vy+dy, vx}); dist[vy+dy][vx] = dist[vy][vx]; } else{ q.push_back({vy+dy, vx}); dist[vy+dy][vx] = dist[vy][vx] + 1; } } } for(ll dx = (vx > 0 ? -1 : 0); dx <= (vx < m-1 ? 1 : 0); dx++){ if(g[vy][vx+dx] != '.' && vis[vy][vx+dx] == false){ if(g[vy][vx] == g[vy][vx+dx]){ q.push_front({vy, vx+dx}); dist[vy][vx+dx] = dist[vy][vx]; } else{ q.push_back({vy, vx+dx}); dist[vy][vx+dx] = dist[vy][vx] + 1; } } } vis[vy][vx] = true; ans = dist[vy][vx]; } } int main(){ cin >> n >> m; g.resize(n), dist.resize(n), vis.resize(n); for(ll i = 0; i < n; i++){ cin >> g[i]; dist[i].assign(m, -1); vis[i].assign(m, false); } bfs(0, 0); cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...