#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <bitset>
#include <numeric>
#include <functional>
#include <iomanip>
#include <sstream>
using namespace std;
#define int long long
#define pb push_back
vector<int> vivi;
int l=0,r=0;
void dfs(int node, vector<vector<int>> &adj, vector<int> &viss, int ayrac){
viss[node]=1;
if(node<ayrac){
if(vivi[node]==0){
l++;
vivi[node]=1;
}
} else {
if(vivi[node]==0){
r++;
vivi[node]=1;
}
}
for(auto go: adj[node]){
if(viss[go]==0){
dfs(go, adj, viss, ayrac);
}
}
}
void solve(){
int n,m;
cin>>n>>m;
vector<vector<char>> arr(n, vector<char>(m));
vector<vector<int>> vis(n, vector<int>(m,0));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) cin>>arr[i][j];
}
int cevap=0;
int idx=1;
for(int i=0;i<n;i++){
for(int j=0;j<m-2;j++){
if(arr[i][j]=='R' && arr[i][j+1]=='G' && arr[i][j+2]=='W'){
vis[i][j]=idx;
vis[i][j+1]=idx;
vis[i][j+2]=idx;
idx++;
}
}
}
int ayrac=idx;
vector<vector<int>> adj(n*m*2);
for(int j=0;j<m;j++){
for(int i=0;i<n-2;i++){
if(arr[i][j]=='R'&& arr[i+1][j]=='G'&& arr[i+2][j]=='W'){
int curr = idx;
if(vis[i][j]) { adj[curr].pb(vis[i][j]); adj[vis[i][j]].pb(curr); }
if(vis[i+1][j]) { adj[curr].pb(vis[i+1][j]); adj[vis[i+1][j]].pb(curr); }
if(vis[i+2][j]) { adj[curr].pb(vis[i+2][j]); adj[vis[i+2][j]].pb(curr); }
idx++;
}
}
}
vector<int> viss(idx,0);
vivi.resize(idx,0);
for(int i=1;i<ayrac;i++){
if(viss[i]==0){
l=0; r=0;
dfs(i, adj, viss, ayrac);
cevap += max(l,r);
}
}
for(int i=ayrac;i<idx;i++){
if(viss[i]==0){
l=0; r=0;
dfs(i, adj, viss, ayrac);
cevap+=max(l,r);
}
}
cout<<cevap;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |