#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;
void Solve(int N) {
int cur = 0;
int prev = 0;
int x = log2(N) + 1;
//cout << x << " ";
vector<int> binary(N + 1, 0);
vector<int> firstgroup;
vector<int> secondgroup;
for(int i = 1; i < 2 * N + 1; i ++){
cur = Query(i);
if(cur == prev){
firstgroup.push_back(i);
} else {
secondgroup.push_back(i);
}
prev = cur;
}
for(int i = 1; i < 2 * N + 1; i ++){
cur = Query(i);
}
/*for(int i = 0; i < firstgroup.size(); i ++){
cout << firstgroup[i] << " ";
} cout << "\n";
for(int i = 0; i < secondgroup.size(); i ++){
cout << secondgroup[i] << " ";
} cout << "\n\n";*/
for(int bit = 0; bit < x; bit ++){
for(int i = 0; i < N; i ++){
if(i & (1 << bit)){
prev = Query(firstgroup[i]);
//cout << firstgroup[i] << " ";
} else {
//cout << 0 << " ";
}
} //cout << "\n";
for(int i = 0; i < N; i ++){
cur = Query(secondgroup[i]);
if(cur == prev){
binary[i] += (1 << bit);
}
prev = Query(secondgroup[i]);
}
for(int i = 0; i < N; i ++){
if(i & (1 << bit)){
prev = Query(firstgroup[i]);
}
}
}
for(int i = 0; i < N; i ++){
//cout << secondgroup[i] << " : " << firstgroup[binary[i]] << "\n";
Answer(secondgroup[i], firstgroup[binary[i]]);
}
}
/*
g++ -std=gnu++17 -O2 -o minerals grader.cpp minerals.cpp
10
1 7
2 19
3 9
4 12
5 6
8 13
10 11
14 20
15 17
16 18
*/
/*void Solve(int N) {
int cur = 0;
int prev = 0;
int x = log2(2 * N) + 1;
vector<int> binary(2 * N + 1, 0);
vector<int> a(2 * N + 1, 0);
for(int bit = 0; bit < x; bit ++){
// 15,000 changes per pass on average
for(int i = 1; i <= 2 * N; i ++){
int state = i & (1 << bit);
int on = 0;
if(state) on = 1;
if(on != a[i]){
prev = Query(i);
a[i] ^= 1;
}
//cout << a[i] << " ";
} //cout << "\n";
for(int i = 1; i <= 2 * N; i ++){
if(i & (1 << bit)){
cur = Query(i);
if(cur == prev){
binary[i] += (1 << bit);
}
prev = Query(i);
}
}
// Bits that were originally off
//
for(int i = 1; i <= 2 * N; i ++){
if(!(i & (1 << bit))){
cur = Query(i);
a[i] ^= 1;
if(cur == prev){
binary[i] += (1 << bit);
} else {
prev = Query(i);
a[i] ^= 1;
}
}
}
}
for(int i = 1; i <= 2 * N; i ++){
if(i < binary[i]){
//cout << i << " : " << binary[i] << "\n";
Answer(i, binary[i]);
}
}
}*/
/*
g++ -std=gnu++17 -O2 -o minerals grader.cpp minerals.cpp
10
1 7
2 19
3 9
4 12
5 6
8 13
10 11
14 20
15 17
16 18
7
3 14
1 12
5 11
7 13
4 10
2 16
6 15
10
1 17
2 14
3 12
4 19
5 13
6 15
7 11
8 16
9 18
10 20
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |