#include "mushrooms.h"
using namespace std;
#define START 101
/*
2 * START + (n - 2 * START) / (START - 1)
*/
int count_mushrooms(int n) {
vector<int> knownAs, knownBs;
knownAs.push_back(0);
int pos = 1;
while (pos < n && knownAs.size() < START && knownBs.size() < START) {
int res = use_machine({0, pos});
if (res == 0) knownAs.push_back(pos);
else knownBs.push_back(pos);
pos++;
}
int res = knownAs.size();
while (pos < n) {
int mushroomsInQuery = min(START - 1, n - pos);
vector<int> query;
bool isA = knownAs.size() >= START;
for (int i = 0; i < mushroomsInQuery; i++) {
if (isA) {
query.push_back(knownAs[i]);
} else {
query.push_back(knownBs[i]);
}
query.push_back(pos++);
}
if (isA) {
query.push_back(knownAs[mushroomsInQuery]);
} else {
query.push_back(knownBs[mushroomsInQuery]);
}
int qres = use_machine(query) / 2;
if (isA) {
res += mushroomsInQuery - qres;
} else {
res += qres;
}
}
return res;
}
/*
B_B_B_B_B
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |