Submission #712320

#TimeUsernameProblemLanguageResultExecution timeMemory
712320dozerDango Maker (JOI18_dango_maker)C++14
13 / 100
1 ms340 KiB
#include <bits/stdc++.h>
using namespace std;
#define sp " "
#define endl "\n";
#define fastio() cin.tie(0), ios_base::sync_with_stdio(0)
#define pb push_back
#define pii pair<int, int>
#define st first
#define nd second
#define N 3005

const int modulo = 1e9 + 7;

int arr[N][N], root[N * N], done[N][N];
pii sz[N];
set<int> roots;

int find(int node)
{
	if (root[node] == node) return node;
	return root[node] = find(root[node]); 
}


void uni(int a, int b)
{
	a = find(a), b = find(b);
	if (sz[a].st + sz[a].nd < sz[b].st + sz[b].nd) swap(a, b);
	if (a == b) return;
	root[b] = a;
	roots.erase(b);
	sz[a].st += sz[b].st, sz[a].nd += sz[b].nd;
}

int32_t main()
{
	fastio();

	map<char, int> val;
	val['R'] = 1, val['G'] = 2, val['W'] = 3;

	int n, m;
	cin>>n>>m;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			char tmp;
			cin>>tmp;
			arr[i][j] = val[tmp];
		}
	}
	for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) done[i][j] = (i - 1) * m + j;
	for (int i = 1; i <= n * m; i++) root[i] = i, roots.insert(i);

	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			int val = 0, f = 1;
			for (int k = i; k <= i + 2; k++)
			{
				val += arr[k][j] * f;
				f *= 10;
			}
			if (val == 321)
			{
				//cout<<"v "<<i<<sp<<j<<endl;
				sz[find(done[i][j])].st++;
				for (int k = i + 1; k <= i + 2; k++)
					uni(done[i][j], done[k][j]);
			}


			val = 0, f = 1;
			for (int k = j; k <= j + 2; k++)
			{
				val += arr[i][k] * f;
				f *= 10;
			}
			if (val == 321)
			{
				//cout<<"> "<<i<<sp<<j<<endl;
				sz[find(done[i][j])].nd++;
				for (int k = j + 1; k <= j + 2; k++)
					uni(done[i][j], done[i][k]);
			}
		}
	}

	for (auto i : roots)
	{
		ans += max(sz[i].st, sz[i].nd);
	}
	cout<<ans<<endl;
	cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " seconds\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...