This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int) x.size()
//int tryCombination(int S[]);
//void answer(int S[], int D[]);
int S[10010], SS[10010], D[10010], E[10010];
int query[10010];
void fill_ans(int n){
    for(int i=0;i<n;i++){
        query[E[i]] = S[i];
    }
}
void divide(vector<int>& v1, vector<int>& v2, vector<int>& v3){
    v2.clear(); v3.clear();
    for(int i=0;i<sz(v1)/2;i++){
        v2.push_back(v1[i]);
    }
    for(int i=sz(v1)/2;i<sz(v1);i++){
        v3.push_back(v1[i]);
    }
}
void exploreCave(int N) {
    memset(D,-1,sizeof D);
    memset(E,-1,sizeof E);  
    for(int i=0;i<N;i++){
        int t;
        for(int j=0;j<N;j++) query[j] = 0;
        fill_ans(i);
        t = tryCombination(query);
        S[i] = (t>i || t==-1) ? 0 : 1;
        vector<int> v, v1, v2;
        for(int j=0;j<N;j++) if( D[j] == -1 ) v.push_back(j);
        while( sz(v) > 1 ){
            divide(v, v1, v2);
            for(int j=0;j<N;j++) query[j] = S[i]^1;
            for(auto e : v1) query[e] = S[i];
            fill_ans(i);
            t = tryCombination(query);
            if( t > i || t == -1 ) v = v1;
            else v = v2;
        }
        D[v[0]] = i;
        E[i] = v[0];
    }
    for(int i=0;i<N;i++){
        SS[E[i]] = S[i];
    }
    answer(SS,D);
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |