# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
525057 | fabijan_cikac | Minerals (JOI19_minerals) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#include "minerals.h"
const int MAXN = (1 << 17);
#define F first
#define S second
#define pp pair<int, int>
vector<pp> sol;
deque<int> q;
int p[MAXN] = { 0 };
/*int Query(int x){
int y; cin >> y; return y;
}
void Answer(int x, int y){
return;
}*/
void findpar(vector<int> v, int val){
if (v.size() == 2){
sol.push_back({v[0], v[1]});
return;
}
if (!val){
vector<int> a[2]; int maks = v.size() / 4;
int zad = -1; bool b = false;
for (int i = 0; i < v.size(); ++i){
int x = Query(v[i] + 1); q.push_back(v[i]); p[v[i]] = 0;
bool b2 = false;
if ((zad == -1) || (zad == x && b) || (zad == x + 1 && x >= maks)){
a[0].push_back(v[i]); b2 = true;
}
else{
Query(v[i] + 1); a[1].push_back(v[i]); p[v[i]] = 1;
}
zad = x; b = b2;
}
findpar(a[0], 0); findpar(a[1], 1);
}
else{
while (!q.empty()){
if (p[q.front()]){
int z = Query(q.front() + 1);
}
q.pop_front();
}
vector<int> a[2]; int maks = v.size() / 4;
for (int i = 0; i < v.size(); ++i){
int x = Query(v[i] + 1); q.push_back(v[i]); p[v[i]] = 1;
if (x > maks){
Query(v[i] + 1); a[1].push_back(v[i]); p[v[i]] = 0;
}
else a[0].push_back(v[i]);
}
findpar(a[0], 0); findpar(a[1], 1);
}
}
void Solve(int N){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
vector<int> v;
for (int i = 0; i < 2 * N; ++i)
v.push_back(i);
findpar(v);
for (int i = 0; i < N; ++i)
Answer(sol[i].F + 1, sol[i].S + 1);
}