Submission #1284294

#TimeUsernameProblemLanguageResultExecution timeMemory
1284294crunchymonTracks in the Snow (BOI13_tracks)C++20
0 / 100
1578 ms1114112 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long int
#define all(v) v.begin(),v.end()
#define pb push_back

void dfsF1(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){

	// cout<<"hello";
	int ans = false;
	for (auto [x , y] : edges){
		int xx = x + i;
		int yy = y + j;

		if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.' && grid[xx][yy] != 'R'){
			grid[xx][yy] = 'R';
			dfsF1(xx , yy , grid , edges);
		}
	}



}

void dfsF2(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){

	// cout<<"hello";
	int ans = false;
	for (auto [x , y] : edges){
		int xx = x + i;
		int yy = y + j;

		if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.'){
			grid[xx][yy] = '.';
			dfsF2(xx , yy , grid , edges);
		}
	}



}

void dfsR1(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){

	int ans = false;
	for (auto [x , y] : edges){
		int xx = x + i;
		int yy = y + j;

		if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.' && grid[xx][yy] != 'F'){
			grid[xx][yy] = 'F';
			dfsR1(xx , yy , grid , edges);
		}
	}


}

void dfsR2(int i , int j , vector <vector <char>> &grid , vector<pair<int,int>> &edges){

	int ans = false;
	for (auto [x , y] : edges){
		int xx = x + i;
		int yy = y + j;

		if (xx >= 0 && xx < grid.size() && yy >= 0 && yy < grid[0].size() && grid[xx][yy] != '.'){
			grid[xx][yy] = '.';
			dfsR2(xx , yy , grid , edges);
		}
	}


}


void solve(){
	int h , w; cin >> h >> w;
	vector <vector<char>> grid(h , vector <char> (w , '.'));
	for (int i = 0; i<h; i++){
		for (int j = 0; j<w; j++){
			char c; cin >> c;
			grid[i][j] = c;
		}
	}	

	vector<pair<int,int>> edges = {{1,0} , {-1 , 0} , {0 , 1} , {0 , -1}};

	int counter = 1;
	if (grid[0][0] == 'F'){
		dfsF1(0,0, grid , edges);

		for (int i = 0; i<h; i++){
			for (int j = 0; j<w; j++){
				if (grid[i][j] == 'F'){
					counter ++;
					dfsF1(i , j , grid , edges);
				}
			}
		}


		for (int i = 0; i<h; i++){
			for (int j = 0; j<w; j++){
				if (grid[i][j] == 'R'){
					counter ++;
					dfsR2(i , j , grid , edges);
				}
			}
		}


	}
	else{
		dfsR1(0,0 , grid , edges);

		for (int i = 0; i<h; i++){
			for (int j = 0; j<w; j++){
				if (grid[i][j] == 'R'){
					counter ++;
					dfsR1(i , j , grid , edges);
				}
			}
		}


		for (int i = 0; i<h; i++){
			for (int j = 0; j<w; j++){
				if (grid[i][j] == 'F'){
					counter ++;
					dfsF2(i , j , grid , edges);
				}
			}
		}
	}


	

	cout << counter<<endl;
}

int32_t main(){
	// int n; cin >> n;
	int n = 1;
	for (int i = 0; i<n; i++){
		solve();
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...