Submission #719262

#TimeUsernameProblemLanguageResultExecution timeMemory
719262thimote75Tracks in the Snow (BOI13_tracks)C++14
100 / 100
839 ms155244 KiB
#include <bits/stdc++.h> using namespace std; #define idata vector<int> #define imap vector<idata> #define EMPTY -1 #define FOX 0 #define RABBIT 1 #define di pair<int, int> imap positions; int height, width; imap visited; int stage = 1; void try_add (deque<di> &dq, int x, int y, int nx, int ny) { if (positions[nx][ny] == EMPTY) return ; if (visited [nx][ny] != EMPTY) return ; int valuation = positions[nx][ny] == positions[x][y] ? 0 : 1; visited[nx][ny] = visited[x][y] + valuation; if (valuation == 0) dq.push_front({ nx, ny }); if (valuation == 1) dq.push_back ({ nx, ny }); } int bfs () { deque<di> point_queue; point_queue.push_front({ 0, 0 }); visited[0][0] = 1; int max_stage = 0; while (point_queue.size() != 0) { di meta = point_queue.front(); point_queue.pop_front(); int x, y; x = meta.first; y = meta.second; max_stage = max(max_stage, visited[x][y]); if (x != 0) try_add(point_queue, x, y, x - 1, y); if (y != 0) try_add(point_queue, x, y, x, y - 1); if (x != height - 1) try_add(point_queue, x, y, x + 1, y); if (y != width - 1) try_add(point_queue, x, y, x, y + 1); } return max_stage; } int main () { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> height >> width; positions.resize( height, idata(width, EMPTY) ); visited .resize( height, idata(width, EMPTY) ); for (int h = 0; h < height; h ++) { string buffer; cin >> buffer; for (int w = 0; w < width; w ++) { int mu = EMPTY; if (buffer[w] == 'F') mu = FOX; if (buffer[w] == 'R') mu = RABBIT; positions[h][w] = mu; } } cout << bfs(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...