제출 #640002

#제출 시각아이디문제언어결과실행 시간메모리
640002alextmTracks in the Snow (BOI13_tracks)C++14
100 / 100
1245 ms123660 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 4001; const int dx[] = {-1, 1, 0, 0}; const int dy[] = {0, 0, -1, 1}; char mat[MAXN][MAXN]; int dist[MAXN][MAXN], n, m; bool inside(int x, int y) { return (x >= 1 && x <= n && y >= 1 && y <= m && mat[x][y] != '.'); } int main() { cin >> n >> m; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> mat[i][j]; deque<pair<int,int>> dq; dq.emplace_back(1, 1); dist[1][1] = 1; int answer = 1; while(!dq.empty()) { int l = dq.front().first; int c = dq.front().second; dq.pop_front(); answer = max(answer, dist[l][c]); for(int k = 0; k < 4; k++) { int nxtl = l + dx[k]; int nxtc = c + dy[k]; if(inside(nxtl, nxtc) && !dist[nxtl][nxtc]) { if(mat[l][c] != mat[nxtl][nxtc]) { // weight 1 dist[nxtl][nxtc] = dist[l][c] + 1; dq.emplace_back(nxtl, nxtc); } else { dist[nxtl][nxtc] = dist[l][c]; dq.push_front({nxtl, nxtc}); } } } } cout << answer << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...