Submission #250403

#TimeUsernameProblemLanguageResultExecution timeMemory
250403hhh07Cave (IOI13_cave)C++14
100 / 100
525 ms632 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 a[], 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)
            a[i] = 0;
    }
 
    int y = tryCombination(a);
    if (y == -1)
        return n;
    return y;
}
 
void exploreCave(int n){
    int x[n];
    int curr = 0, curr2 = n - 1;
    int pitaj[n], ans[n];
    for (int i = 0; i < n; i++){
        pitaj[i] = 1;
        ans[i] = 1;
        x[i] = -1;
    }
    for (int i = 0; i < n; i++){
        int beg = curr, end = curr2, odg = 0;
 		for (int j = 0; j < n; j++)
               pitaj[j] = ans[j];
        int y = tryCombination(pitaj);
        if (y > i || y == -1)
            odg = 1;
        while(beg < end){
            int mid = (beg + end)/2;
            for (int j = 0; j < n; j++)
                pitaj[j] = ans[j];
            int y = ask(n, pitaj, x, odg, beg, mid, end);
            if (y > i)
                end = mid;
            else
                beg = mid + 1;
        }
        x[beg] = i;
        pitaj[beg] = odg;
        ans[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...