제출 #345049

#제출 시각아이디문제언어결과실행 시간메모리
345049limabeansZoo (COCI19_zoo)C++17
0 / 110
1 ms492 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 done[maxn][maxn]; int cc = 0; 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]; } queue<pair<int,int>> qq; qq.push({0,0}); while (qq.size()) { int x = qq.front().first; int y = qq.front().second; qq.pop(); if (x<0 || y<0 || x>=n || y>=m) continue; char c = g[x][y]; if (c=='*') continue; if (done[x][y]) continue; cc++; // flood this char // add other char to queue queue<pair<int,int>> flood; flood.push({x,y}); while (flood.size()) { //marked as done when flooded int x = flood.front().first; int y = flood.front().second; flood.pop(); if (x<0 || y<0 || x>=n || y>=m) continue; if (g[x][y]=='*') continue; if (done[x][y]) continue; if (c == g[x][y]) { done[x][y] = true; flood.push({x-1,y}); flood.push({x+1,y}); flood.push({x,y-1}); flood.push({x,y+1}); } else if (g[x][y] != '*') { qq.push({x,y}); } } } out(cc); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...