Submission #53199

#TimeUsernameProblemLanguageResultExecution timeMemory
53199aintaMemory 2 (JOI16_memory2)C++17
100 / 100
3 ms828 KiB
#include "Memory2_lib.h"

int w[220][220], R[220][2], RC[220];

int Get(int a, int b) {
	if (w[a][b] == 0) {
		int t = Flip(a, b);
		w[a][b] = w[b][a] = t + 1;
	}
	return w[a][b] - 1;
}

void Solve(int T, int N){
	if (N == 1) {
		Answer(0, 1, 0);
		return;
	}
	Get(0, 1);
	int i, t1 = 0, t2 = 1, t3 = -1;
	for (i = 2; i < 2*N; i++) {
		if (t3 == -1) {
			int c1 = Get(t1, t2);
			int c2 = Get(t1, i);
			int c3 = Get(t2, i);
			if (c1 == c2&&c2 == c3) {
				t3 = i;
				continue;
			}
			else {
				if (c1 == c2) {
					R[c1][RC[c1]++] = t1;
					t1 = i;
				}
				else if (c1 == c3) {
					R[c1][RC[c1]++] = t2;
					t2 = i;
				}
				else {
					R[c2][RC[c2]++] = i;
				}
			}
		}
		else {
			int cc = Get(t1, t2);
			int c1 = Get(t1, i);
			int c2 = Get(t2, i);
			int cnt = (cc == c1) + (cc == c2);
			if (cnt == 0) {
				R[c1][RC[c1]++] = i;
			}
			else {
				int c3 = Get(t3, i);
				if (cc == c1)R[cc][RC[cc]++] = t1;
				if (cc == c2)R[cc][RC[cc]++] = t2;
				if (cc == c3)R[cc][RC[cc]++] = t3;
				if (cc != c1)t2 = t1;
				if (cc != c2)t2 = t2;
				if (cc != c3)t2 = t3;
				t1 = i;
				t3 = -1;
			}
		}
	}
	for (i = 0; i < N; i++) {
		if (RC[i] == 0)Answer(t1, t2, i);
		else Answer(R[i][0], R[i][1], i);
	}
	return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...