Submission #1037013

#TimeUsernameProblemLanguageResultExecution timeMemory
1037013sssamuiTracks in the Snow (BOI13_tracks)C++17
100 / 100
538 ms28804 KiB
#include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <queue> using namespace std; vector<int> radd = { -1, 0, 1, 0 }; vector<int> cadd = { 0, -1, 0, 1 }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int h, w; cin >> h >> w; vector<vector<char>> trk(h + 2, vector<char>(w + 2, '.')); for (int i = 1; i <= h; i++) for (int j = 1; j <= w; j++) cin >> trk[i][j]; int ans = 0; vector<vector<bool>> vis(h + 2, vector<bool>(w + 2, false)); queue<pair<int, int>> bfs; queue<pair<int, int>> nxt; bfs.push({ 1, 1 }); vis[1][1] = true; while (!bfs.empty()) { ans++; while (!bfs.empty()) { int r = bfs.front().first, c = bfs.front().second; bfs.pop(); for (int dir = 0; dir < 4; dir++) if (!vis[r + radd[dir]][c + cadd[dir]]) { vis[r + radd[dir]][c + cadd[dir]] = true; if (trk[r + radd[dir]][c + cadd[dir]] == trk[r][c]) bfs.push({ r + radd[dir], c + cadd[dir] }); else if (trk[r + radd[dir]][c + cadd[dir]] != '.') nxt.push({ r + radd[dir], c + cadd[dir] }); } } while (!nxt.empty()) { bfs.push(nxt.front()); nxt.pop(); } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...