Submission #1192704

#TimeUsernameProblemLanguageResultExecution timeMemory
1192704JooDdaeMemory 2 (JOI16_memory2)C++20
100 / 100
0 ms328 KiB
#include "Memory2_lib.h"
#include<bits/stdc++.h>
using namespace std;

vector<vector<int>> q;

int qry(int x, int y) {
	return q[x][y] == -1 ? q[x][y] = q[y][x] = Flip(x, y) : q[x][y];
}

vector<int> c;

void ans(int x, int d) {
	if(c[d] == -1) c[d] = x;
	else Answer(x, c[d], d);
}

void Solve(int T, int N) {
	int M = N+N;
	q.resize(M, vector<int>(M, -1));
	c.resize(N, -1);

	vector<int> v = {0, 1};

	for(int i=2;i<M;i++) {
		v.push_back(i);

		do {
			int x = v.rbegin()[2], y = v.rbegin()[1], z = v.back();

			if(qry(x, y) == qry(x, z) && qry(x, z) == qry(y, z)) {
				if(v.size() == 4) {
					Answer(x, y, qry(x, y));
					v.pop_back(), v.pop_back(), v.pop_back();
					v.push_back(z);
				}
				break;
			} else if(qry(x, z) == qry(x, y)) {
				v.pop_back(), v.pop_back(), v.pop_back();
				v.push_back(y), v.push_back(z);
				ans(x, qry(x, z));
			} else if(qry(y, z) == qry(x, y)) {
				v.pop_back(), v.pop_back(), v.push_back(z);
				ans(y, qry(y, z));
			} else {
				v.pop_back();
				ans(z, qry(x, z));
				break;
			}
		} while(v.size() >= 3);
	}
	
	if(v.size() == 2) {
		Answer(v[0], v[1], qry(v[0], v[1]));
		return;
	}

	for(int i=0;i<3;i++) {
		int x = v[i], y = v[(i+1)%3], z = v[(i+2)%3];
		if(qry(x, y) == qry(x, z)) {
			Answer(y, z, qry(y, z));
			ans(x, qry(x, y));
			break;
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...