Submission #1216778

#TimeUsernameProblemLanguageResultExecution timeMemory
1216778giorgi123glmCave (IOI13_cave)C++20
100 / 100
256 ms536 KiB
#include "cave.h"
#include <complex.h>
#include <iostream>
#include <mutex>
#include <vector>
using namespace std;

void exploreCave(int N) {
    vector <int> ans (N + 1);
    vector <int> ans1 (N + 1);
    vector <bool> locked (N + 1);

    for (int i = 0; i < N; i++) {
        int curres = tryCombination (ans.data());
        // cout << "-->" << i << ' ' << curres << '\n';
        if (curres == i) {
            // try to find correct one
            int L = 0, R = N - 1;
            int cans = 0;

            while (L <= R) {
                int mid = (L + R) / 2;

                vector <int> ask = ans;
                for (int i = 0; i <= mid; i++)
                    if (!locked[i])
                        ask[i] = 1;
                
                unsigned int getres = tryCombination (ask.data());
                // cout << mid << ' ' << getres << '\n';
                if (getres > i) {
                    R = mid - 1;
                    cans = mid;
                } else {
                    L = mid + 1;
                }
            }

            // cout << i << ' ' << cans << ' ' << 1 << '\n';

            ans[cans] = 1;
            ans1[cans] = i;
            locked[cans] = 1;
        } else {
            // try to find incorrect one
            int L = 0, R = N - 1;
            int cans = 0;

            while (L <= R) {
                int mid = (L + R) / 2;

                vector <int> ask = ans;
                for (int i = 0; i <= mid; i++)
                    if (!locked[i])
                        ask[i] = 1;
                
                unsigned int getres = tryCombination (ask.data());
                // cout << mid << ' ' << getres << '\n';
                if (getres == i) {
                    R = mid - 1;
                    cans = mid;
                } else {
                    L = mid + 1;
                }
            }

            // cout << i << ' ' << cans << ' ' << 0 << '\n';
            
            ans1[cans] = i;
            locked[cans] = 1;
        }
    }

    answer (ans.data(), ans1.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...