답안 #229512

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
229512 2020-05-04T21:14:41 Z hanagasumi Dango Maker (JOI18_dango_maker) C++17
13 / 100
5 ms 384 KB
#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);
	vector<int> cntt(cnt, 0);
	set<pair<int, int>> now;
	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++) {
		cntt[i] = len(g[i]);
		now.insert({cntt[i], i});
	}
	while(len(now) > 0) {
		auto rasm = *now.begin();
		now.erase(rasm);
		used[rasm.sc] = 1;
		for (auto x : g[rasm.sc]) {
			if(used[x])
				continue;
			used[x] = 1;
			now.erase({cntt[x], x});
			for (auto y : g[x]) {
				if(used[x])
					continue;
				now.erase({cntt[y], y});
				cntt[y]--;
				now.insert({cntt[y], y});
			}
		}
		ans++;
	}
	// for (int i = 0; i < cnt; i++) {
	// 	if(used[i])
	// 		continue;
	// 	cnt1 = 0, cnt2 = 0;
	// 	dfs(i);
	// 	ans += max(cnt1, cnt2);
	// }
	cout << ans << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 4 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 4 ms 384 KB Output is correct
12 Correct 4 ms 384 KB Output is correct
13 Correct 5 ms 384 KB Output is correct
14 Correct 4 ms 384 KB Output is correct
15 Correct 5 ms 384 KB Output is correct
16 Correct 5 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 4 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 4 ms 384 KB Output is correct
12 Correct 4 ms 384 KB Output is correct
13 Correct 5 ms 384 KB Output is correct
14 Correct 4 ms 384 KB Output is correct
15 Correct 5 ms 384 KB Output is correct
16 Correct 5 ms 384 KB Output is correct
17 Correct 5 ms 384 KB Output is correct
18 Correct 5 ms 384 KB Output is correct
19 Correct 4 ms 384 KB Output is correct
20 Correct 4 ms 384 KB Output is correct
21 Correct 4 ms 384 KB Output is correct
22 Correct 5 ms 384 KB Output is correct
23 Correct 4 ms 384 KB Output is correct
24 Correct 4 ms 384 KB Output is correct
25 Correct 4 ms 384 KB Output is correct
26 Correct 5 ms 384 KB Output is correct
27 Incorrect 4 ms 384 KB Output isn't correct
28 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 4 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 4 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 4 ms 384 KB Output is correct
12 Correct 4 ms 384 KB Output is correct
13 Correct 5 ms 384 KB Output is correct
14 Correct 4 ms 384 KB Output is correct
15 Correct 5 ms 384 KB Output is correct
16 Correct 5 ms 384 KB Output is correct
17 Correct 5 ms 384 KB Output is correct
18 Correct 5 ms 384 KB Output is correct
19 Correct 4 ms 384 KB Output is correct
20 Correct 4 ms 384 KB Output is correct
21 Correct 4 ms 384 KB Output is correct
22 Correct 5 ms 384 KB Output is correct
23 Correct 4 ms 384 KB Output is correct
24 Correct 4 ms 384 KB Output is correct
25 Correct 4 ms 384 KB Output is correct
26 Correct 5 ms 384 KB Output is correct
27 Incorrect 4 ms 384 KB Output isn't correct
28 Halted 0 ms 0 KB -