Submission #1353637

#TimeUsernameProblemLanguageResultExecution timeMemory
1353637WH8Minerals (JOI19_minerals)C++17
70 / 100
11 ms2472 KiB
#include "minerals.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;

vector<int> in, a, b;
int ans=0;
int Flip(int x){
	in[x]=!in[x];
	return Query(x);
}
int Set(int x, int v){
	if(in[x] == v) {
		return ans;
	}
	else {
		return Flip(x);
	}
}

void Solve(int N) {
	int n = N;
	in.resize(2*N+4, 0);
	for(int i=1;i<=2*n;i++){
		int nv=Set(i, 1);
		if(nv == ans + 1){
			a.pb(i);
		}
		else {
			b.pb(i);
		}
		ans = nv;
	}
	/*for(int i=0;i<n;i++){
		cout<<a[i]<<endl;
	}*/
	vector<int> to(n+1, 0);
	for(int bit=0;bit<16;bit++){
		for(int i=0;i<n;i++){
			if(((1<<bit) & i)==0){ // turn on the left half.
				ans=Set(a[i], 1);
			}
			else {
				ans=Set(a[i], 0);
			}
		}
		for(int i=0;i<n;i++){
			int nv=Flip(b[i]);
			if(abs(ans-nv) == 1){ // its in the right half.
				to[i] += (1<<bit);
			}
			ans=nv;
		}
	}
	for(int i=0;i<n;i++){
		Answer(b[i], a[to[i]]);
	}
}
#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...