Submission #1175939

#TimeUsernameProblemLanguageResultExecution timeMemory
1175939Zero_OPMemory 2 (JOI16_memory2)C++20
60 / 100
0 ms328 KiB
#include "Memory2_lib.h" //subtask 12 but K = 300
#include <bits/stdc++.h>

using namespace std;

namespace{
	
}

void Solve(int T, int N){
	if(N == 1){
		Answer(0, 1, 1);
		return;
	}

	if(N == 2){
		for(int i = 0; i < 4; ++i){
			for(int j = i+1; j < 4; ++j){
				if(Flip(i, j) == 1){
					Answer(i, j, 1);
					
					int x = -1, y = -1;
					for(int k = 0; k < 4; ++k){
						if(k != i && k != j){
							if(x == -1) x = k;
							else y = k;
						}
					}

					Answer(x, y, 0);
					return;
				}
			}
		}
		assert(false);
		return;
	}

	int a = 0, b = 1, c = -1;
	int cur = Flip(0, 1);

	vector<pair<int, int>> assertions;
	vector<int> answer(2 * N, -1);

	for(int i = 2; i < 2 * N; ++i){
		int ai = Flip(a, i);
		int bi = Flip(b, i);
		int ci = (c != -1 ? Flip(c, i) : -1);
		
		int nw = max({ai, bi, ci});
		if(cur < nw){
			if(nw == ai) {
				assertions.emplace_back(b, cur);
				b = i;
			}
			else if(nw == bi) {
				assertions.emplace_back(a, cur);
				a = i;
			}
			else{
				assertions.emplace_back(a, cur);
				assertions.emplace_back(b, cur);
				a = c; 
				b = i;
			}
			
			cur =  nw; c = -1;
		} else if(cur == nw) c = i;
		else{
			assertions.emplace_back(i, nw);
		}
	}

	for(auto [x, y] : assertions) {
		answer[x] = y;
	}

	if(c == -1){
		assert(cur == N-1);
		answer[a] = N-1;
		answer[b] = N-1;
	} else{
		assert(false);
	}

	for(int i = 0; i < 2 * N; ++i){
		if(answer[i] == -1){
			answer[i] = Flip(a, i);
		}
	}

	vector<pair<int, int>> position(N, make_pair(-1, -1));
	for(int i = 0; i < 2 * N; ++i){
		assert(answer[i] != -1);
		if(position[answer[i]].first == -1) position[answer[i]].first = i;
		else {
			assert(position[answer[i]].second == -1);
			position[answer[i]].second = i;
		}
	}

	for(int i = 0; i < N; ++i){
		Answer(position[i].first, position[i].second, i);
	}
}

//g++ -o grader grader.cpp Memory2.cpp
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...