Submission #1308692

#TimeUsernameProblemLanguageResultExecution timeMemory
1308692CyanberryCave (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...