Submission #250387

#TimeUsernameProblemLanguageResultExecution timeMemory
250387hhh07Cave (IOI13_cave)C++14
0 / 100
14 ms384 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <utility>
#include <set>
#include <cmath>
#include <climits>
#include <cstring>
#include "cave.h"
 
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef pair<ll, ll> ii;
 

int ask(int n, int pitaj[], int x[], int odg, int beg, int mid, int end){
    if (odg)
        beg = mid + 1;
    else
        end = mid;
    for (int i = beg; i <= end; i++){
        if (x[i] == -1)
            pitaj[i] = 0;
    }
    int y = tryCombination(pitaj);
    if (y == -1)
        return n;
    return y;
}
void exploreCave(int n){
    int x[n];
    int curr = 0, curr2 = n - 1;
    int pitaj[n];
    for (int i = 0; i < n; i++){
        pitaj[i] = 1;
        x[i] = -1;
    }
    for (int i = 0; i < n; i++){
        int beg = curr, end = curr2, odg = 0;
        if (tryCombination(pitaj) >= i)
            odg = 1;
        while(beg < end){
            int mid = (beg + end)/2;
            if (ask(n, pitaj, x, odg, beg, mid, end) > i)
                end = mid;
            else
                beg = mid + 1;
        }
        x[beg] = i;
        pitaj[beg] = odg;
        if (beg == curr)
            curr = beg + 1;
        if (beg == curr2)
            curr2 = beg - 1;
    }
    
    answer(pitaj, x);
}

#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...