Submission #777794

#TimeUsernameProblemLanguageResultExecution timeMemory
777794overwatch9Tracks in the Snow (BOI13_tracks)C++17
47.50 / 100
2084 ms47808 KiB
#include <iostream> #include <vector> #include <string> #include <queue> using namespace std; vector <string> grid; int n, m; int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; int bfs() { int covered = 1; queue <pair <int, int>> q; q.push({n-1, m-1}); vector <vector <bool>> vis(n, vector <bool> (m)); vis[n-1][m-1] = true; char og = grid[n-1][m-1]; if (og == 'R') grid[n-1][m-1] = 'F'; else grid[n-1][m-1] = 'R'; while (!q.empty()) { int x = q.front().first, y = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; if (vis[nx][ny] || grid[nx][ny] != og) continue; covered++; if (og == 'R') grid[nx][ny] = 'F'; else grid[nx][ny] = 'R'; q.push({nx, ny}); } } return covered; } int main() { cin >> n >> m; grid.resize(n); for (int i = 0; i < n; i++) cin >> grid[i]; int ans = 1; int lst = bfs(); while (true) { int res = bfs(); ans++; if (res == lst) break; lst = res; } cout << ans-1 << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...