Submission #1235550

#TimeUsernameProblemLanguageResultExecution timeMemory
1235550jiayiiyaijTracks in the Snow (BOI13_tracks)C++17
58.44 / 100
2097 ms78788 KiB
#include <iostream> #include <vector> #include <deque> using namespace std; #define AT(grid, r, c) (grid[(r) * W + (c)]) int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int H, W; cin >> H >> W; vector<char> mapp(H * W); for (int i = 0; i < H; ++i) { string line; cin >> line; for (int j = 0; j < W; ++j) { AT(mapp, i, j) = line[j]; } } char first = (AT(mapp, 0, 0) == 'R') ? 'R' : 'F'; char second = (first == 'R') ? 'F' : 'R'; vector<char> ani = {first, second}; int dirs[4][2] = { {0,1}, {1,0}, {0,-1}, {-1,0} }; vector<int> vis(H * W, 0); int vid = 1; int count = 0; while (true) { bool flag0 = false, flag1 = false; deque<pair<int, int>> q; q.push_back({0, 0}); AT(vis, 0, 0) = vid; while (!q.empty()) { auto [r, c] = q.front(); q.pop_front(); char current = AT(mapp, r, c); for (int d = 0; d < 4; ++d) { int rr = r + dirs[d][0]; int cc = c + dirs[d][1]; if (rr < 0 || rr >= H || cc < 0 || cc >= W) continue; int idx = rr * W + cc; if (vis[idx] == vid) continue; char next = AT(mapp, rr, cc); if (next == '.') continue; if (current == ani[0] || current == '#') { vis[idx] = vid; if (next == ani[0] || current == ani[0]) flag0 = true; if (next == ani[1]) flag1 = true; q.push_back({rr, cc}); } if (current == ani[1]) { if (next == ani[1] || next == '#') { vis[idx] = vid; q.push_back({rr, cc}); } } } AT(mapp, r, c) = '#'; } if (!flag0) break; count += 1; if (!flag1) break; count += 1; vid++; } cout << count << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...