Submission #770757

#TimeUsernameProblemLanguageResultExecution timeMemory
770757xCqliburTracks in the Snow (BOI13_tracks)C++17
0 / 100
23 ms3048 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int mxH=505, mxW=505; int H, W; char grid[mxH][mxW], rChange[4]={0, 1, 0, -1}, cChange[4]={1, 0, -1, 0}; bool vis[mxH][mxW]; vector<pair<int, int>> dir; void floodfill(int r, int c, char curr) { stack<pair<int, int>> frontier; frontier.push({r, c}); while(!frontier.empty()) { r=frontier.top().first; c=frontier.top().second; frontier.pop(); if(r<0||r>=H||c<0||c>=W||vis[r][c]) { continue; } if(grid[r][c]!=curr&&grid[r][c]!='.') { dir.push_back({r, c}); continue; } for(int i=0; i<4; ++i) { if(vis[r+rChange[i]][c+cChange[i]]) continue; vis[r+rChange[i]][c+cChange[i]]=1; frontier.push({r+rChange[i], c+cChange[i]}); } } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> H >> W; for(int i=0; i<H; ++i) { for(int j=0; j<W; ++j) { cin >> grid[i][j]; } } vis[0][0]=1; int ans=0; dir.push_back({0, 0}); while(1) { if(dir.empty()) break; for(pair<int, int> p : dir) { floodfill(p.first, p.second, grid[p.first][p.second]); dir.erase(remove(dir.begin(), dir.end(), p), dir.end()); } ++ans; } cout << ans+1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...