제출 #166687

#제출 시각아이디문제언어결과실행 시간메모리
166687OrtTracks in the Snow (BOI13_tracks)C++11
100 / 100
1619 ms188148 KiB
#include<bits/stdc++.h> #define MAX 4010 using namespace std; struct state { int y, x, d; state(int y, int x, int d) { this->y = y; this->x = x; this->d = d; } }; int n, m, s; char mat[MAX][MAX]; bool visited[MAX][MAX]; deque<state> dq; int dy[] = {1, 0, -1, 0}; int dx[] = {0, 1, 0, -1}; bool valid(int y, int x) { return y>=1 && y<=n && x>=1 && x<=m && !visited[y][x] && mat[y][x]!='.'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >> mat[i][j]; dq.push_front(state(1,1,1)); while(!dq.empty()) { state st = dq.front(); dq.pop_front(); visited[st.y][st.x] = true; s = max(s, st.d); for(int i=0;i<4;i++) { int nx = st.x+dx[i]; int ny = st.y+dy[i]; if(!valid(ny,nx)) continue; if(mat[st.y][st.x]==mat[ny][nx]) dq.push_front(state(ny,nx,st.d)); else dq.push_back(state(ny,nx,st.d+1)); } } cout << s; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...