Submission #1308692

#TimeUsernameProblemLanguageResultExecution timeMemory
1308692Cyanberry동굴 (IOI13_cave)C++20
100 / 100
471 ms532 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...