# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1170037 | niepamietamhasla | Minerals (JOI19_minerals) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#include "minerals.h"
void rozw(vector<int> lewo, vector<int> prawo, bool c){
if(lewo.size() == 0 and prawo.size() == 0) return;
if(lewo.size() == 1 and prawo.size() == 1) { Answer(lewo[0], prawo[0]); return; }
int mid = lewo.size() / 2;
vector<int> l1;
vector<int> l2;
vector<int> p1;
vector<int> p2;
int poprz = -1;
for(int i = 0; i < mid; ++i){
poprz = Query(lewo[i]);
l1.push_back(lewo[i]);
}
for(int i = mid; i < lewo.size(); ++i){
l2.push_back(lewo[i]);
}
for(int i = 0; i < prawo.size(); ++i){
int nowy = Query(prawo[i]);
if(nowy != poprz){
p1.push_back(prawo[i]);
}
else{
Query(prawo[i]);
p2.push_back(prawo[i]);
}
}
rozw(l1, p1, c ^ 1);
rozw(l2, p2, c);
}
void solve(int N){
vector<int> lewo;
vector<int> prawo;
int prev = 0;
for(int i = 0; i < 2 * N; ++i){
int ile = Query(i);
if(ile != prev){
lewo.push_back(i);
}
else{
prawo.push_back(i);
}
prev = ile;
}
rozw(lewo, prawo, 1);
}