답안 #212399

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
212399 2020-03-22T21:38:33 Z gs14004 길고양이 (JOI20_stray) C++17
100 / 100
234 ms 16884 KB
#include "Anthony.h"
#include <bits/stdc++.h>
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
using namespace std;
using pi = pair<int, int>;

namespace {
	const int MAXN = 20005;
	vector<pi> gph[MAXN];
	int col[MAXN], pae[MAXN];
	void dfs(int x, int p){
		for(auto &[i, v] : gph[x]){
			if(v == p) continue;
			if(p == -1) col[i] = 0;
			else col[i] = col[pae[x]] ^ 1;
			pae[v] = i;
			if(sz(gph[v]) == 2){
				vector<int> seq = {x, v};
				while(sz(gph[seq.back()]) == 2){
					int w = seq.back();
					int nxt = -1;
					for(auto &k : gph[w]){
						if(k.second != seq[sz(seq) - 2]){
							nxt = k.second;
							pae[nxt] = k.first;
						}
					}
					seq.push_back(nxt);
				}
				vector<int> rpt; 
				if(col[i] == 0) rpt = {0, 1, 1, 0, 1, 0};
				else rpt = {1, 1, 0, 1, 0, 0};
				for(int i=2; i<sz(seq); i++){
					col[pae[seq[i]]] = rpt[(i - 1) % 6];
				}
				dfs(seq[sz(seq) - 1], seq[sz(seq) - 2]);
			}
			else{
				dfs(v, x);
			}
		}
	}
	int dist[MAXN];
	void bfs(int n, int x, int A){
		memset(dist, 0x3f, sizeof(dist));
		queue<int> que; que.push(x); dist[x] = 0;
		while(sz(que)){
			int x = que.front(); que.pop();
			for(auto &[i, j] : gph[x]){
				if(dist[j] > dist[x] + 1){
					dist[j] = dist[x] + 1;
					que.push(j);
				}
			}
		}
		for(int i=0; i<n; i++){
			for(auto &[j, v] : gph[i]){
				if(dist[i] <= dist[v]){
					col[j] = (dist[i] % A);
				}
			}
		}
	}
}  // namespace

std::vector<int> Mark(int N, int M, int A, int B,
                      std::vector<int> U, std::vector<int> V) {
    for(int i=0; i<sz(U); i++){
    	gph[U[i]].emplace_back(i, V[i]);
    	gph[V[i]].emplace_back(i, U[i]);
	}
	if(A == 2) dfs(0, -1);
	else bfs(N, 0, A);
	return vector<int>(col, col + M);
}
#include "Catherine.h"
#include <bits/stdc++.h>
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(), (v).end()
using namespace std;
using pi = pair<int, int>;


namespace {
	int A;
	bool determined = 0;
	vector<int> prev_seq;
}  // namespace

void Init(int A, int B) {
	::A = A;
}

bool bad_sign(vector<int> v){
	if(sz(v) >= 4){
		reverse(all(v));
		v.resize(4);
		reverse(all(v));
		if(v == vector<int>({1, 1, 0, 1})) return 1;
		if(v == vector<int>({0, 1, 0, 0})) return 1;
		if(v == vector<int>({1, 0, 1, 0})) return 1;
		if(v == vector<int>({0, 0, 1, 1})) return 1;
		return 0;
	}
	return 0;
}

int Move(std::vector<int> y) {
	if(A >= 3){
		if(sz(prev_seq)) y[prev_seq.back()]++;
		int ans = -1;
		for(int i=0; i<sz(y); i++){
			if(y[i]){
				if(y[(i + A - 1) % sz(y)]) ans = (i + A - 1) % A;
				else ans = i;
				break;
			}
		}
		prev_seq.push_back(ans);
		return ans;
	}
	int deg = accumulate(all(y), 0) + (sz(prev_seq) > 0);
	if(deg == 1){
		determined = 1;
		if(sz(prev_seq)){
			prev_seq.push_back(prev_seq.back());
			return -1;
		}
		int pos = find(all(y), 1) - y.begin();
		prev_seq.push_back(pos);
		return pos;
	}
	if(deg != 2){
		determined = 1;
		if(sz(prev_seq)){
			if(y[prev_seq.back()] == 0){
				prev_seq.push_back(prev_seq.back());
				return -1;
			}
			y[prev_seq.back()]++;
		}
		for(int i=0; i<sz(y); i++){
			if(y[i] == 1){
				prev_seq.push_back(i);
				return i; 
			}
		}
		assert(0);
	}
	vector<int> cands;
	for(int i=0; i<sz(y); i++){
		for(int j=0; j<y[i]; j++) cands.push_back(i);
	}
	if(sz(cands) == 2){
		prev_seq = cands;
		swap(prev_seq[0], prev_seq[1]);
	}
	else{
		prev_seq.push_back(cands[0]);
	}
	if(!determined && bad_sign(prev_seq)){
		determined = 1;
		prev_seq.pop_back();
		prev_seq.push_back(prev_seq.back());
		return -1;
	}
	return cands[0];
}

Compilation message

Anthony.cpp: In function 'void {anonymous}::bfs(int, int, int)':
Anthony.cpp:50:19: warning: unused variable 'i' [-Wunused-variable]
    for(auto &[i, j] : gph[x]){
                   ^
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 15756 KB Output is correct
2 Correct 10 ms 1792 KB Output is correct
3 Correct 47 ms 15096 KB Output is correct
4 Correct 92 ms 16840 KB Output is correct
5 Correct 81 ms 16884 KB Output is correct
6 Correct 71 ms 15508 KB Output is correct
7 Correct 68 ms 15492 KB Output is correct
8 Correct 84 ms 16384 KB Output is correct
9 Correct 68 ms 16304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 15756 KB Output is correct
2 Correct 10 ms 1792 KB Output is correct
3 Correct 47 ms 15096 KB Output is correct
4 Correct 92 ms 16840 KB Output is correct
5 Correct 81 ms 16884 KB Output is correct
6 Correct 71 ms 15508 KB Output is correct
7 Correct 68 ms 15492 KB Output is correct
8 Correct 84 ms 16384 KB Output is correct
9 Correct 68 ms 16304 KB Output is correct
10 Correct 56 ms 13568 KB Output is correct
11 Correct 69 ms 13552 KB Output is correct
12 Correct 56 ms 13560 KB Output is correct
13 Correct 54 ms 13648 KB Output is correct
14 Correct 57 ms 13936 KB Output is correct
15 Correct 79 ms 14424 KB Output is correct
16 Correct 66 ms 16252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 13308 KB Output is correct
2 Correct 10 ms 1792 KB Output is correct
3 Correct 55 ms 12844 KB Output is correct
4 Correct 83 ms 14640 KB Output is correct
5 Correct 85 ms 14800 KB Output is correct
6 Correct 66 ms 13288 KB Output is correct
7 Correct 55 ms 13316 KB Output is correct
8 Correct 73 ms 14112 KB Output is correct
9 Correct 65 ms 14116 KB Output is correct
10 Correct 65 ms 13820 KB Output is correct
11 Correct 68 ms 13796 KB Output is correct
12 Correct 75 ms 13708 KB Output is correct
13 Correct 63 ms 13764 KB Output is correct
14 Correct 72 ms 14064 KB Output is correct
15 Correct 67 ms 14164 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 13308 KB Output is correct
2 Correct 10 ms 1792 KB Output is correct
3 Correct 55 ms 12844 KB Output is correct
4 Correct 83 ms 14640 KB Output is correct
5 Correct 85 ms 14800 KB Output is correct
6 Correct 66 ms 13288 KB Output is correct
7 Correct 55 ms 13316 KB Output is correct
8 Correct 73 ms 14112 KB Output is correct
9 Correct 65 ms 14116 KB Output is correct
10 Correct 65 ms 13820 KB Output is correct
11 Correct 68 ms 13796 KB Output is correct
12 Correct 75 ms 13708 KB Output is correct
13 Correct 63 ms 13764 KB Output is correct
14 Correct 72 ms 14064 KB Output is correct
15 Correct 67 ms 14164 KB Output is correct
16 Correct 71 ms 11728 KB Output is correct
17 Correct 68 ms 11748 KB Output is correct
18 Correct 56 ms 11768 KB Output is correct
19 Correct 55 ms 11788 KB Output is correct
20 Correct 67 ms 12400 KB Output is correct
21 Correct 65 ms 12224 KB Output is correct
22 Correct 62 ms 14200 KB Output is correct
23 Correct 62 ms 11892 KB Output is correct
24 Correct 53 ms 11952 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 2048 KB Output is correct
2 Correct 10 ms 1536 KB Output is correct
3 Correct 10 ms 1536 KB Output is correct
4 Correct 10 ms 1548 KB Output is correct
5 Correct 10 ms 1548 KB Output is correct
6 Correct 10 ms 1548 KB Output is correct
7 Correct 10 ms 1792 KB Output is correct
8 Correct 10 ms 1792 KB Output is correct
9 Correct 12 ms 1536 KB Output is correct
10 Correct 11 ms 1536 KB Output is correct
11 Correct 12 ms 1744 KB Output is correct
12 Correct 10 ms 1792 KB Output is correct
13 Correct 11 ms 1792 KB Output is correct
14 Correct 11 ms 1536 KB Output is correct
15 Correct 10 ms 1548 KB Output is correct
16 Correct 11 ms 1548 KB Output is correct
17 Correct 10 ms 1536 KB Output is correct
18 Correct 10 ms 1792 KB Output is correct
19 Correct 11 ms 1548 KB Output is correct
20 Correct 11 ms 1792 KB Output is correct
21 Correct 10 ms 1792 KB Output is correct
22 Correct 10 ms 1792 KB Output is correct
23 Correct 11 ms 1888 KB Output is correct
24 Correct 10 ms 1536 KB Output is correct
25 Correct 11 ms 1744 KB Output is correct
26 Correct 10 ms 1792 KB Output is correct
27 Correct 10 ms 1792 KB Output is correct
28 Correct 11 ms 1792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 11516 KB Output is correct
2 Correct 59 ms 12624 KB Output is correct
3 Correct 10 ms 1536 KB Output is correct
4 Correct 45 ms 11380 KB Output is correct
5 Correct 77 ms 12688 KB Output is correct
6 Correct 210 ms 12808 KB Output is correct
7 Correct 55 ms 11680 KB Output is correct
8 Correct 60 ms 11808 KB Output is correct
9 Correct 74 ms 12576 KB Output is correct
10 Correct 77 ms 12756 KB Output is correct
11 Correct 79 ms 12704 KB Output is correct
12 Correct 79 ms 12704 KB Output is correct
13 Correct 67 ms 12704 KB Output is correct
14 Correct 204 ms 12732 KB Output is correct
15 Correct 73 ms 12812 KB Output is correct
16 Correct 79 ms 12732 KB Output is correct
17 Correct 79 ms 12392 KB Output is correct
18 Correct 126 ms 12448 KB Output is correct
19 Correct 69 ms 12556 KB Output is correct
20 Correct 81 ms 12356 KB Output is correct
21 Correct 126 ms 12408 KB Output is correct
22 Correct 61 ms 12320 KB Output is correct
23 Correct 55 ms 11536 KB Output is correct
24 Correct 66 ms 11492 KB Output is correct
25 Correct 61 ms 11568 KB Output is correct
26 Correct 63 ms 11528 KB Output is correct
27 Correct 67 ms 12668 KB Output is correct
28 Correct 63 ms 12748 KB Output is correct
29 Correct 71 ms 12672 KB Output is correct
30 Correct 70 ms 12788 KB Output is correct
31 Correct 75 ms 11480 KB Output is correct
32 Correct 53 ms 11536 KB Output is correct
33 Correct 62 ms 11628 KB Output is correct
34 Correct 82 ms 11636 KB Output is correct
35 Correct 69 ms 12632 KB Output is correct
36 Correct 67 ms 12652 KB Output is correct
37 Correct 56 ms 12600 KB Output is correct
38 Correct 67 ms 12668 KB Output is correct
39 Correct 64 ms 12572 KB Output is correct
40 Correct 61 ms 12708 KB Output is correct
41 Correct 69 ms 12788 KB Output is correct
42 Correct 75 ms 12756 KB Output is correct
43 Correct 63 ms 12864 KB Output is correct
44 Correct 76 ms 12872 KB Output is correct
45 Correct 73 ms 12784 KB Output is correct
46 Correct 70 ms 12912 KB Output is correct
47 Correct 54 ms 12164 KB Output is correct
48 Correct 72 ms 12336 KB Output is correct
49 Correct 60 ms 12156 KB Output is correct
50 Correct 68 ms 12292 KB Output is correct
51 Correct 56 ms 11860 KB Output is correct
52 Correct 54 ms 11864 KB Output is correct
53 Correct 60 ms 11696 KB Output is correct
54 Correct 55 ms 11844 KB Output is correct
55 Correct 53 ms 11864 KB Output is correct
56 Correct 56 ms 11856 KB Output is correct
57 Correct 55 ms 11656 KB Output is correct
58 Correct 80 ms 11520 KB Output is correct
59 Correct 66 ms 11764 KB Output is correct
60 Correct 61 ms 11624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 11504 KB Output is correct
2 Correct 69 ms 12260 KB Output is correct
3 Correct 9 ms 1536 KB Output is correct
4 Correct 52 ms 11504 KB Output is correct
5 Correct 67 ms 12592 KB Output is correct
6 Correct 234 ms 12812 KB Output is correct
7 Correct 55 ms 11768 KB Output is correct
8 Correct 61 ms 11680 KB Output is correct
9 Correct 77 ms 12704 KB Output is correct
10 Correct 77 ms 12792 KB Output is correct
11 Correct 78 ms 12728 KB Output is correct
12 Correct 74 ms 12576 KB Output is correct
13 Correct 76 ms 12704 KB Output is correct
14 Correct 219 ms 13080 KB Output is correct
15 Correct 76 ms 12812 KB Output is correct
16 Correct 89 ms 12696 KB Output is correct
17 Correct 70 ms 12320 KB Output is correct
18 Correct 135 ms 12456 KB Output is correct
19 Correct 74 ms 12448 KB Output is correct
20 Correct 72 ms 12432 KB Output is correct
21 Correct 148 ms 12424 KB Output is correct
22 Correct 83 ms 12572 KB Output is correct
23 Correct 56 ms 11388 KB Output is correct
24 Correct 58 ms 11364 KB Output is correct
25 Correct 57 ms 11644 KB Output is correct
26 Correct 56 ms 11644 KB Output is correct
27 Correct 62 ms 12672 KB Output is correct
28 Correct 76 ms 12684 KB Output is correct
29 Correct 62 ms 12676 KB Output is correct
30 Correct 67 ms 12796 KB Output is correct
31 Correct 59 ms 11516 KB Output is correct
32 Correct 57 ms 11652 KB Output is correct
33 Correct 62 ms 11604 KB Output is correct
34 Correct 58 ms 11636 KB Output is correct
35 Correct 68 ms 12660 KB Output is correct
36 Correct 63 ms 12644 KB Output is correct
37 Correct 63 ms 12644 KB Output is correct
38 Correct 71 ms 12536 KB Output is correct
39 Correct 62 ms 12700 KB Output is correct
40 Correct 60 ms 12660 KB Output is correct
41 Correct 64 ms 12768 KB Output is correct
42 Correct 79 ms 12864 KB Output is correct
43 Correct 74 ms 12796 KB Output is correct
44 Correct 83 ms 12908 KB Output is correct
45 Correct 65 ms 12788 KB Output is correct
46 Correct 68 ms 12788 KB Output is correct
47 Correct 62 ms 12228 KB Output is correct
48 Correct 62 ms 12288 KB Output is correct
49 Correct 58 ms 12300 KB Output is correct
50 Correct 55 ms 12308 KB Output is correct
51 Correct 52 ms 11764 KB Output is correct
52 Correct 55 ms 11756 KB Output is correct
53 Correct 57 ms 11672 KB Output is correct
54 Correct 66 ms 11720 KB Output is correct
55 Correct 59 ms 11772 KB Output is correct
56 Correct 55 ms 11664 KB Output is correct
57 Correct 65 ms 11636 KB Output is correct
58 Correct 69 ms 11676 KB Output is correct
59 Correct 49 ms 11736 KB Output is correct
60 Correct 68 ms 11664 KB Output is correct