#include <bits/stdc++.h>
using namespace std;
#include "cave.h"
int num = 15;
vector<int> perm {15, 3, 4, 12, 10, 11, 14, 13, 7, 8, 1, 6, 9, 5, 2};
vector<int> inv;
vector<int> req {0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1};
// void answer(int S[], int D[]) {
// for (int i = 0; i < num; ++i) {
// cout<<S[i]<<' ';
// }
// cout<<endl;
// for (int i = 0; i < num; ++i) {
// cout<<D[i]<<' ';
// }
// cout<<endl;
// }
// int tryCombination(int S[]) {
// // cout<<"\nCALL:";
// int ret = -1;
// for (int i = 0; i < num; ++i) {
// // cout<<S[i]<<' ';
// if (S[inv[i]] != req[inv[i]] && ret == -1) ret = i;
// }
// // cout<<"R:"<<ret;
// return ret;
// }
void exploreCave(int doors) {
vector<int> retPerm (doors, -1), retReq(doors, -1), queryReq(doors, -1);
for (int i = 0; i < doors; ++i) {
for (int j = 0; j < doors; ++j) {
queryReq[j] = retReq[j];
if (queryReq[j] == -1) queryReq[j] = 0;
}
int result = tryCombination(queryReq.data());
int rightSwitch = result == i;
int l = 0, r = doors;
while (r - l > 1) {
int m = (r+l)/2;
for (int j = 0; j < doors; ++j) {
queryReq[j] = retReq[j];
if (queryReq[j] != -1) continue;
queryReq[j] = (j >= l) && (j < m);
if (!rightSwitch) queryReq[j] = 1-queryReq[j];
}
result = tryCombination(queryReq.data());
if (result != i) {
r = m;
} else {
l = m;
}
}
retReq[l] = rightSwitch;
retPerm[l] = i;
}
answer(retReq.data(), retPerm.data());
}
| # | 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... |