Submission #241657

#TimeUsernameProblemLanguageResultExecution timeMemory
241657dsjongDango Maker (JOI18_dango_maker)C++14
13 / 100
6 ms384 KiB
#include <bits/stdc++.h>
using namespace std;
set<int>node[100];
bool vis[100];
char a[15][15];
vector<int>adj[100];
int odd, even;
void dfs(int x, int p){
	if(p%2==1) odd++;
	else even++;
	vis[x]=true;
	for(int y:adj[x]){
		if(vis[y]) continue;
		dfs(y, 1-p);
	}
}
int main(){
	int n, m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	int cnt=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			string s="";
			if(j+2<m){
				s=(s+a[i][j]+a[i][j+1]+a[i][j+2]);
				//cout<<s<<endl;
				if(s=="RGW"){
					node[cnt].insert(i*m+j);
					node[cnt].insert(i*m+j+1);
					node[cnt].insert(i*m+j+2);
					cnt++;
				}
			}
			if(i+2<n){
				s="";
				s=s+a[i][j]+a[i+1][j]+a[i+2][j];
				//cout<<s<<endl;
				if(s=="RGW"){
					node[cnt].insert(i*m+j);
					node[cnt].insert((i+1)*m+j);
					node[cnt].insert((i+2)*m+j);
					cnt++;
				}
			}
		}
	}
	for(int i=0;i<cnt;i++){
		for(int j=i+1;j<cnt;j++){
			set<int>s;
			for(int k:node[i]) s.insert(k);
			for(int k:node[j]) s.insert(k);
			if((int)s.size()!=6){
				adj[i].push_back(j);
				adj[j].push_back(i);
			}
		}
	}
	int ans=0;
	for(int i=0;i<cnt;i++){
		if(vis[i]) continue;
		odd=0, even=0;
		dfs(i, 0);
		ans+=max(odd, even);
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...