답안 #566205

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
566205 2022-05-22T06:16:59 Z GusterGoose27 Dango Maker (JOI18_dango_maker) C++11
13 / 100
1 ms 332 KB
#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 10;
int val[MAXN][MAXN]; // 0 red, 1 g, 2 w
int n, m;
int uf[2*MAXN*MAXN]; // cuz im lazy
int size[2*MAXN*MAXN];
int common[MAXN*MAXN];
vector<int> edges[2*MAXN*MAXN];
bool color[2*MAXN*MAXN];
bool visited[2*MAXN*MAXN];

int find(int i) {
	if (uf[i] == -1) return i;
	return (uf[i] = find(uf[i]));
}

void merge(int a, int b) {
	int ida = find(a);
	int idb = find(b);
	if (ida == idb) return;
	edges[a].push_back(b);
	edges[b].push_back(a);
	size[ida] += size[idb];
	uf[idb] = ida;
}

bool is_vertical(int i, int j) {
	if (i >= n-2) return 0;
	return (val[i][j] == 0 && val[i+1][j] == 1 && val[i+2][j] == 2);
}

bool is_horizontal(int i, int j) {
	if (j >= m-2) return 0;
	return (val[i][j] == 0 && val[i][j+1] == 1 && val[i][j+2] == 2);
}

int get(int i) {
	vector<int> q;
	q.push_back(i);
	visited[i] = 1;
	int num_0 = 1;
	int num_1 = 0;
	while (!q.empty()) {
		int cur = q.back();
		q.pop_back();
		for (int next: edges[cur]) {
			if (visited[next]) continue;
			visited[next] = 1;
			color[next] = 1-color[cur];
			if (color[next]) num_1++;
			else num_0++;
			q.push_back(next);
		}
	}
	return max(num_0, num_1);
}

void add(int a, int b) {
	if (common[a] == -1) common[a] = b;
	else merge(common[a], b);
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) common[i*m+j] = -1;
	}
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		for (int j = 0; j < m; j++) {
			if (s[j] == 'R') val[i][j] = 0;
			if (s[j] == 'G') val[i][j] = 1;
			if (s[j] == 'W') val[i][j] = 2;
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			int chash = i*m+j;
			if (is_vertical(i, j)) {
				size[chash] = 1;
				uf[chash] = -1;
				add(chash, chash);
				add(chash+m, chash);
				add(chash+2*m, chash);
			}
			if (is_horizontal(i, j)) {
				size[chash+n*m] = 1;
				uf[chash+n*m] = -1;
				add(chash, chash+n*m);
				add(chash+1, chash+n*m);
				add(chash+2, chash+n*m);
			}
		}
	}
	int answ = 0;
	for (int i = 0; i < 2*n*m; i++) {
		if (uf[i] == -1) answ += get(i);
	}
	cout << answ << "\n";
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 332 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 332 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 1 ms 324 KB Output is correct
29 Correct 1 ms 212 KB Output is correct
30 Correct 1 ms 212 KB Output is correct
31 Correct 1 ms 212 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 1 ms 212 KB Output is correct
34 Incorrect 0 ms 212 KB Output isn't correct
35 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 332 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 1 ms 324 KB Output is correct
29 Correct 1 ms 212 KB Output is correct
30 Correct 1 ms 212 KB Output is correct
31 Correct 1 ms 212 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 1 ms 212 KB Output is correct
34 Incorrect 0 ms 212 KB Output isn't correct
35 Halted 0 ms 0 KB -