Submission #1126172

#TimeUsernameProblemLanguageResultExecution timeMemory
1126172MuhammetTracks in the Snow (BOI13_tracks)C++17
100 / 100
1061 ms89308 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m, cn;

vector <vector <int>> vis;

vector <vector <char>> c;

int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);

	cin >> n >> m;
	c.resize(n+1, vector <char> (m+1));
	vis.assign(n+1, vector <int> (m+1,0));
	int cnt = 0;
	bool tr = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			cin >> c[i][j];
		}
	}
	int ans = 0;
	queue <pair<int,int>> q, q1;
	char a = c[1][1];
	q.push({1,1});
	while(!q.empty()){
		auto [x,y] = q.front();
		q.pop();
		if(x > 1 and c[x-1][y] == c[x][y] and !vis[x-1][y]){
			vis[x-1][y] = true;
			q.push({x-1,y});
		}
		if(x < n and c[x+1][y] == c[x][y] and !vis[x+1][y]){
			vis[x+1][y] = true;
			q.push({x+1,y});
		}
		if(y > 1 and c[x][y-1] == c[x][y] and !vis[x][y-1]){
			vis[x][y-1] = true;
			q.push({x,y-1});
		}
		if(y < m and c[x][y+1] == c[x][y] and !vis[x][y+1]){
			vis[x][y+1] = true;
			q.push({x,y+1});
		}
		if(x > 1 and c[x-1][y] != c[x][y] and c[x-1][y] != '.' and !vis[x-1][y]){
			vis[x-1][y] = true;
			q1.push({x-1,y});
		}
		if(x < n and c[x+1][y] != c[x][y] and c[x+1][y] != '.' and !vis[x+1][y]){
			vis[x+1][y] = true;
			q1.push({x+1,y});
		}
		if(y > 1 and c[x][y-1] != c[x][y] and c[x][y-1] != '.' and !vis[x][y-1]){
			vis[x][y-1] = true;
			q1.push({x,y-1});
		}
		if(y < m and c[x][y+1] != c[x][y] and c[x][y+1] != '.' and !vis[x][y+1]){
			vis[x][y+1] = true;
			q1.push({x,y+1});
		}
		if(q.empty()){
			ans++;
			while(!q1.empty()){
				q.push({q1.front()});
				q1.pop();
			}
		}
	}
	cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...