Submission #1218308

#TimeUsernameProblemLanguageResultExecution timeMemory
1218308CyanberryTracks in the Snow (BOI13_tracks)C++17
100 / 100
1637 ms35968 KiB
#include <bits/stdc++.h> using namespace std; int mod = 1e9 + 7; vector<vector<int>> moves = { {-1, 0}, {1, 0}, {0, -1}, {0, 1}, }; signed main() { ios::sync_with_stdio(false); cin.tie(0); int h, w; string e; vector<string> grid; cin>>h>>w; for (int i = 0; i < h; ++i) { cin>>e; grid.push_back(e); } int ret = 0; queue<pair<int, int>> bfs, nex; vector<vector<bool>> visited(h, vector<bool>(w, false)); bfs.push({0, 0}); while (!bfs.empty()) { pair<int, int> curr = bfs.front(); bfs.pop(); if (!visited[curr.first][curr.second]) { visited[curr.first][curr.second] = true; for (vector<int> move : moves) { int nx = curr.first + move[0]; int ny = curr.second + move[1]; if (nx < 0 || ny < 0 || nx >= h || ny >= w) { continue; } if (visited[nx][ny]) continue; if (grid[nx][ny] == '.') continue; if (grid[nx][ny] == grid[curr.first][curr.second]) bfs.push({nx, ny}); else nex.push({nx, ny}); } } if (bfs.empty()) { // cout<<curr.first<<' '<<curr.second<<'\n'; swap(bfs, nex); while(!nex.empty()) nex.pop(); ++ret; } } // if (h == 5 && w == 8 && ret == 2) while(true) ++h; cout<<ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...