제출 #229510

#제출 시각아이디문제언어결과실행 시간메모리
229510hanagasumiDango Maker (JOI18_dango_maker)C++17
13 / 100
5 ms392 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <deque>
#include <map>
#include <set>
#include <complex>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <random>

#define ft first
#define sc second
#define pb push_back
#define len(v) (int)v.size()
// #define int ll

using namespace std;
typedef long long ll;

vector<int> type;
vector<bool> used;
vector<vector<int>> g;
int cnt1 = 0, cnt2 = 0;

void dfs(int v) {
	used[v] = 1;
	if(type[v] == 1) 
		cnt1++;
	else
		cnt2++;
	for (auto x : g[v]) {
		if(used[x])
			continue;
		dfs(x);
	}
}

signed main() {
	#ifdef PC
		freopen("in.txt", "r", stdin);
		freopen("out.txt", "w", stdout);
	#endif
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n, m, cnt = 0, ans = 0;
	cin >> n >> m;
	vector<vector<char>> mat(n, vector<char> (m));
	vector<vector<pair<int, int>>> have(n, vector<pair<int, int>> (m, 	{-1, -1}));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> mat[i][j];
		}
	}
	for (int i = 0; i < n - 2; i++) {
		for (int j = 0; j < m; j++) {
			if(!(mat[i][j] == 'R' && mat[i + 1][j] == 'G' && mat[i + 2][j] == 'W'))
				continue;
			type.pb(1);
			have[i][j].ft = cnt, have[i + 1][j].ft = cnt, have[i + 2][j].ft = cnt;
			cnt++;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m - 2; j++) {
			if(!(mat[i][j] == 'R' && mat[i][j + 1] == 'G' && mat[i][j + 2] == 'W'))
				continue;
			type.pb(2);
			have[i][j].sc = cnt, have[i][j + 1].sc = cnt, have[i][j + 2].sc = cnt;
			cnt++;
		}
	}

	g = vector<vector<int>> (cnt);
	used = vector<bool> (cnt, 0);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if(have[i][j].ft == -1 || have[i][j].sc == -1) 
				continue;
			g[have[i][j].ft].pb(have[i][j].sc);
			g[have[i][j].sc].pb(have[i][j].ft);
		}
	}
	for (int i = 0; i < cnt; i++) {
		if(used[i])
			continue;
		cnt1 = 0, cnt2 = 0;
		dfs(i);
		ans += max(cnt1, cnt2);
	}
	cout << ans << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...