Submission #1192660

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

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

	if(N <= 12) {
		for(int i=0;i<M;i++) for(int j=i+1;j<M;j++) q[i][j] = q[j][i] = Flip(i, j);

		vector<int> chk(N, 0);
		for(int r=0;r<N;r++) {
			vector<int> v;
			for(int i=0;i<M;i++) {
				set<int> S;
				for(int j=0;j<M;j++) if(!chk[q[i][j]]) S.insert(q[i][j]);
				if(S.size() == 1) v.push_back(i);
			}

			int u = q[v[0]][v[1]];
			Answer(v[0], v[1], u), chk[u] = 1;
		}
		return;
	}

	srand(time(0));
	random_device rd;
	mt19937 g(rd());
	vector<int> id(M); iota(id.begin(), id.end(), 0);
	shuffle(id.begin(), id.end(), g);

	array<int, 2> v = {id[0], id[1]};
	q[id[0]][id[1]] = q[id[1]][id[0]] = Flip(id[0], id[1]);
	for(int j=2;j<M;j++) {
		int i = id[j];
		auto [x, y] = v;
		q[x][i] = q[i][x] = Flip(x, i);
		q[y][i] = q[i][y] = Flip(y, i);

		if(q[x][y] == q[x][i] && q[x][i] == q[y][i]) {
			if(rand()%3 == 0) v = {y, i};
			else if(rand()%2) v = {x, i};
		} else {
			if(q[x][i] == q[x][y]) v = {y, i};
			else if(q[y][i] == q[x][y]) v = {x, i};
		}
	}
	Answer(v[0], v[1], q[v[0]][v[1]]);

	vector<int> c(N, -1);
	for(int i=0;i<M;i++) if(i != v[0] && i != v[1]) {
		int u = Flip(i, v[0]);

		if(c[u] != -1) Answer(c[u], i, u);
		else c[u] = i;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...