Submission #1308690

#TimeUsernameProblemLanguageResultExecution timeMemory
1308690Cyanberry동굴 (IOI13_cave)C++20
0 / 100
345 ms528 KiB
#include <bits/stdc++.h> using namespace std; #include "cave.h" // int num = 9; // vector<int> perm {9, 6, 1, 5, 8, 7, 2, 4, 3}; // vector<int> inv; // vector<int> req {0, 1, 1, 0, 1, 0, 0, 0, 0}; // 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+1; // cout<<l<<' '<<rightSwitch<<'\n'; } answer(retPerm.data(), retReq.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...