Submission #994820

#TimeUsernameProblemLanguageResultExecution timeMemory
994820stdfloatCave (IOI13_cave)C++17
100 / 100
465 ms600 KiB
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;
 
void exploreCave(int n) {
    int a[n], b[n];
    for (int i = 0; i < n; i++) {
        a[i] = b[i] = 0;
    }
 
    vector<bool> vis(n);
    for (int z = 0; z < n; z++) {
        int x = tryCombination(a);

        if (z != x) {
            int l = 0, r = n - 1;
            while (l < r) {
                int md = (l + r) >> 1;

                int v[n];
                for (int i = 0; i < n; i++)
                    v[i] = (a[i] || (md < i && !vis[i]));

                if (tryCombination(v) == z) l = md + 1;
                else r = md;
            }

            b[l] = z;
            vis[l] = true;

            continue;
        }


        int l = 0, r = n - 1;
        while (l < r) {
            int md = (l + r) >> 1;
 
            int v[n];
            for (int i = 0; i < n; i++)
                v[i] = (a[i] || (md < i && i <= r && !vis[i]));
 
            int y = tryCombination(v);
            if (y == -1 || x < y) l = md + 1;
            else r = md;
        }

        a[l] = 1; b[l] = x; vis[l] = true;
    }
 
    for (int i = 0; i < n; i++) {
        if (vis[i]) continue;
 
        a[i] = 1;
        b[i] = tryCombination(a);
        a[i] = 0;
    }
 
    answer(a, b);
}
#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...