Submission #345050

#TimeUsernameProblemLanguageResultExecution timeMemory
345050limabeansZoo (COCI19_zoo)C++17
110 / 110
66 ms4716 KiB
#include <bits/stdc++.h> using namespace std; template<typename T> void out(T x) { cout << x << endl; exit(0); } #define watch(x) cout << (#x) << " is " << (x) << endl const int maxn = 1010; int n, m; string g[maxn]; bool viz[maxn][maxn]; int cc = 0; vector<pair<int,int>> moves = { {-1,0}, {1,0}, {0,-1}, {0,1} }; vector<pair<int,int>> qq; void dfs(int x, int y, char c) { if (x<0||y<0||x>=n||y>=m) return; if (viz[x][y]) return; if (g[x][y]==c) { viz[x][y]=true; qq.push_back({x,y}); dfs(x-1,y,c); dfs(x+1,y,c); dfs(x,y-1,c); dfs(x,y+1,c); } } char other(char c) { if (c=='B') return 'T'; if (c=='T') return 'B'; assert(false); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for (int i=0; i<n; i++) { cin>>g[i]; } dfs(0,0,g[0][0]); while (qq.size()) { cc++; vector<pair<int,int>> cur = qq; qq.clear(); char c = g[cur.back().first][cur.back().second]; for (auto p: cur) { int x=p.first; int y=p.second; for (auto mo: moves) { int nx = mo.first+x; int ny = mo.second+y; if (nx>=0 && nx<n && ny>=0 && ny<m && !viz[nx][ny] && g[nx][ny]==other(c)) { dfs(nx,ny,g[nx][ny]); } } } } out(cc); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...