#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++){
// cout<<grid[i][j];
// }
// cout<<endl;
// }
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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |