답안 #1012925

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1012925 2024-07-02T20:13:40 Z Ivo_12 길고양이 (JOI20_stray) C++17
15 / 100
36 ms 17624 KB
#include "Anthony.h"
#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define pii pair < int, int >
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

namespace {

const int N = 2e4+10, M = 2e4+10, A = 4;

vector < pii > edges[N];
vector < int > oznake;
int dis[N];
int zap[N];
queue < int > q;

int pat[6] = {0, 1, 0, 0, 1, 1};

vector < int > mark( int n, int m, int a, int b, vector < int > t1, vector < int > t2 ) {
	for(int i = 0; i < m; i++) {
		edges[t1[i]].pb(mp(t2[i], i));
		edges[t2[i]].pb(mp(t1[i], i));
		oznake.pb(-1);
	}
	dis[0] = 1;
	q.push(0);
	int cur;
	int sus;
	while(!q.empty()) {
		cur = q.front();
		q.pop();
		for(int i = 0; i < (int) edges[cur].size(); i++) {
			sus = edges[cur][i].F;
			if(dis[sus] == 0) {
				q.push(sus);
				dis[sus] = dis[cur]+1;
			}
		}
	}
	if(a>=3) {
		q.push(0);
		while(!q.empty()) {
			cur = q.front();
			q.pop();
			for(int i = 0; i < (int) edges[cur].size(); i++) {
				sus = edges[cur][i].F;
				if(oznake[edges[cur][i].S] == -1) {
					if(dis[sus] > dis[cur]) q.push(sus);
					oznake[edges[cur][i].S] = (dis[cur] - 1) % 3;
				}
			}
		}
	}
	else {
		q.push(0);
		while(!q.empty()) {
			cur = q.front();
			q.pop();
			for(int i = 0; i < (int) edges[cur].size(); i++) {
				sus = edges[cur][i].F;
				if(oznake[edges[cur][i].S] == -1 && (int) edges[cur].size() > 2) {
					if(dis[sus] > dis[cur]) q.push(sus);
					oznake[edges[cur][i].S] = (pat[zap[cur]%6] + 1) % 2;
					zap[sus] = (pat[zap[cur]] + 1) % 2;
				}
				if(oznake[edges[cur][i].S] == -1 && ((int) ((int) edges[cur].size() == 2 && cur != 0) || ((int) edges[cur].size() == 1 && cur == 0))) {
					if(dis[sus] > dis[cur]) q.push(sus);
					oznake[edges[cur][i].S] = pat[(zap[cur] + 1)%6];
					zap[sus] = zap[cur] + 1;
				}
			}
		}
	}
	
	return oznake;
}

}  // namespace

std::vector<int> Mark(int N, int M, int A, int B,
                      std::vector<int> U, std::vector<int> V) {
  std::vector<int> X(M);
  return ::mark(N, M, A, B, U, V);
}
#include "Catherine.h"
#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define pii pair < int, int >
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

namespace {

int ga, gb;
int l[2];

int revpatt[6] = {1, 1, 0, 0, 1, 0};
vector < int > patt[6];
vector < int > ori;
int pokusaj = 0;


void init( int a, int b ) {
	ga = a;
	gb = b;
	l[0] = 0;
	l[1] = 0;
	for(int i = 0; i < 6; i++) {
		for(int j = 0; j < 5; j++) {
			patt[i].pb(revpatt[(j+i)%6]);
		}
	}
}

int move( vector < int > v ) {
	
	if(::ga>=3) {
		if(v[0] && v[1]) return 0;
		if(v[2] && v[0]) return 2;
		if(v[1] && v[2]) return 1;
		if(!(v[0] || v[1])) return 2;
		if(!(v[2] || v[0])) return 1;
		if(!(v[1] || v[2])) return 0;
	}
	pokusaj++;
//	if(pokusaj == 1 && v[0] + v[1] == 2) {
//		if(v[0] == 1 && v[1] == 1) {
//			ori.pb(0);
//			ori.pb(1);
//			l[0] = 0;
//			l[1] = 1;
//			return 1;
//		}
//		if(v[0] == 2 && v[1] == 0) {
//			ori.pb(0);
//			ori.pb(0);
//			l[0] = 1;
//			l[1] = 0;
//			return 0;
//		}
//		if(v[0] == 0 && v[1] == 2) {
//			ori.pb(1);
//			ori.pb(1);
//			l[0] = 0;
//			l[1] = 1;
//			return 1;
//		}
//	}
//	else {
//		if((pokusaj == 2 || pokusaj == 3) && v[0] + v[1] == 1) {
//			ori.pb((int) (v[0] == 0));
//			l[0] = v[0] == 1;
//			l[1] = v[1] == 1;
//			return ((int) (v[0] == 0));
//		}
//		else {
//			if((pokusaj == 4) && v[0] + v[1] == 1) {
//				ori.pb((int) (v[0] == 0));
//				for(int i = 0; i < 6; i++) if(ori==patt[i]) return -1;
//				l[0] = v[0] == 1;
//				l[1] = v[1] == 1;
//				return (int) (v[0] == 0);
//			}
//			else pokusaj = 10;
//		}
//	}
	pokusaj = 10;
	if(v[0] == 0 && v[1] == 0) return -1;
	if(v[0] == 0 && v[1] > 1) {
		return -1;
	}
	if(v[0] > 1 && v[1] == 0) {
		return -1;
	}
	if(v[0] == 0 && v[1] == 1) {
		l[1] = 1;
		l[0] = 0;
		return 1;
	}
	if(v[0] == 1 && v[1] == 0) {
		l[1] = 0;
		l[0] = 1;
		return 0;
	}
	if(v[0] == 1 && v[1] > 1) {
		l[1] = 0;
		l[0] = 1;
		return 0;
	}
	if(v[0] > 1 && v[1] == 1) {
		l[1] = 1;
		l[0] = 0;
		return 1;
	}
	if(l[0]) {
		l[1] = 1;
		l[0] = 0;
		return 1;
	}
	if(l[1]) {
		l[1] = 0;
		l[0] = 1;
		return 0;
	}
	if(v[0] > v[1]) {
		l[1] = 0;
		l[0] = 1;
		return 0;
	}
	l[1] = 1;
	l[0] = 0;
	return 1;
	
}

}  // namespace

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

int Move(std::vector<int> y) {
	return ::move(y);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16732 KB Output is correct
2 Correct 0 ms 1300 KB Output is correct
3 Correct 19 ms 15664 KB Output is correct
4 Correct 29 ms 17500 KB Output is correct
5 Correct 36 ms 17624 KB Output is correct
6 Correct 24 ms 16208 KB Output is correct
7 Correct 22 ms 16272 KB Output is correct
8 Correct 30 ms 16760 KB Output is correct
9 Correct 32 ms 16924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16732 KB Output is correct
2 Correct 0 ms 1300 KB Output is correct
3 Correct 19 ms 15664 KB Output is correct
4 Correct 29 ms 17500 KB Output is correct
5 Correct 36 ms 17624 KB Output is correct
6 Correct 24 ms 16208 KB Output is correct
7 Correct 22 ms 16272 KB Output is correct
8 Correct 30 ms 16760 KB Output is correct
9 Correct 32 ms 16924 KB Output is correct
10 Correct 24 ms 14420 KB Output is correct
11 Correct 24 ms 14248 KB Output is correct
12 Correct 22 ms 14424 KB Output is correct
13 Correct 21 ms 14336 KB Output is correct
14 Correct 23 ms 14924 KB Output is correct
15 Correct 26 ms 15076 KB Output is correct
16 Correct 25 ms 17124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 13972 KB Output is correct
2 Correct 0 ms 1308 KB Output is correct
3 Correct 18 ms 13376 KB Output is correct
4 Correct 27 ms 15452 KB Output is correct
5 Correct 27 ms 15456 KB Output is correct
6 Correct 28 ms 13852 KB Output is correct
7 Correct 24 ms 13912 KB Output is correct
8 Correct 28 ms 14596 KB Output is correct
9 Correct 25 ms 14680 KB Output is correct
10 Correct 27 ms 14500 KB Output is correct
11 Correct 26 ms 14516 KB Output is correct
12 Correct 28 ms 14348 KB Output is correct
13 Correct 30 ms 14352 KB Output is correct
14 Correct 26 ms 14572 KB Output is correct
15 Correct 27 ms 14684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 13972 KB Output is correct
2 Correct 0 ms 1308 KB Output is correct
3 Correct 18 ms 13376 KB Output is correct
4 Correct 27 ms 15452 KB Output is correct
5 Correct 27 ms 15456 KB Output is correct
6 Correct 28 ms 13852 KB Output is correct
7 Correct 24 ms 13912 KB Output is correct
8 Correct 28 ms 14596 KB Output is correct
9 Correct 25 ms 14680 KB Output is correct
10 Correct 27 ms 14500 KB Output is correct
11 Correct 26 ms 14516 KB Output is correct
12 Correct 28 ms 14348 KB Output is correct
13 Correct 30 ms 14352 KB Output is correct
14 Correct 26 ms 14572 KB Output is correct
15 Correct 27 ms 14684 KB Output is correct
16 Correct 27 ms 12436 KB Output is correct
17 Correct 22 ms 12368 KB Output is correct
18 Correct 23 ms 12420 KB Output is correct
19 Correct 23 ms 12372 KB Output is correct
20 Correct 27 ms 13136 KB Output is correct
21 Correct 30 ms 12820 KB Output is correct
22 Correct 27 ms 14944 KB Output is correct
23 Correct 25 ms 12600 KB Output is correct
24 Correct 20 ms 12624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1576 KB Output is correct
2 Correct 1 ms 1300 KB Output is correct
3 Correct 1 ms 1564 KB Output is correct
4 Correct 1 ms 1564 KB Output is correct
5 Correct 1 ms 1572 KB Output is correct
6 Correct 1 ms 1576 KB Output is correct
7 Correct 1 ms 1572 KB Output is correct
8 Incorrect 1 ms 1564 KB Wrong Answer [4]
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 12120 KB Output is correct
2 Incorrect 26 ms 12304 KB Wrong Answer [4]
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 12124 KB Output is correct
2 Incorrect 22 ms 12364 KB Wrong Answer [6]
3 Halted 0 ms 0 KB -