Submission #710026

#TimeUsernameProblemLanguageResultExecution timeMemory
710026LittleCubeMinerals (JOI19_minerals)C++14
40 / 100
30 ms3092 KiB
#include "minerals.h"
#include <bits/stdc++.h>
#define pii pair<int, int>
#define F first
#define S second
using namespace std;

int pre, cur;

bool change(int x)
{
	// cerr << "change " << x << '\n';
	cur = Query(x);
	swap(pre, cur);
	return pre != cur;
}

void solve(vector<int> X, vector<int> Y, bool built)
{
	if(X.size() == 1)
	{
		if(built)
			change(X[0]), change(Y[0]);
		Answer(X[0], Y[0]);
		return;
	}
	int N = X.size(), mid = N / 2;
	
	vector<int> lX(X.begin(), X.begin() + mid), rX(X.begin() + mid, X.end()), lY, rY;

	if(built)
	{
		for(int i = mid; i < N; i++)
			change(X[i]);
		for(int i : Y)
			if(change(i))
				rY.emplace_back(i);
			else 
				lY.emplace_back(i);
		for(int i : lY)
			change(i);
	}
	else
	{
		for(int i = 0; i < mid; i++)
			change(X[i]);
		for(int i : Y)
			if(change(i))
				rY.emplace_back(i);
			else 
				lY.emplace_back(i);
		for(int i : rY)
			change(i);
	}
	solve(lX, lY, 1);
	solve(rX, rY, 0);

}

void Solve(int N)
{
	pre = cur = 0;
	vector<int> X, Y;
	for(int i = 1; i <= 2 * N; i++)
	{
		if(change(i))
			X.emplace_back(i);
		else
			Y.emplace_back(i);
	}
	solve(X, Y, 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...