제출 #1165239

#제출 시각아이디문제언어결과실행 시간메모리
1165239ty_mxzhnCave (IOI13_cave)C++20
100 / 100
196 ms548 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin() , x.end();
#define sz(x) (int)x.size();
void exploreCave(int N) {
    int S[N] , D[N] , query[N] = {0} , vis[N] = {0};
    for(int i = 0;i<N;i++){// door number
        for(int j = 0;j<N;j++){
            if(vis[j])continue;
            query[j] = 0;
        }
        // cout << "door number : " << i << endl;
        // cout << "asking : ";for(int j = 0;j<N;j++)cout << query[j] << " ";cout << endl;
        bool bl = tryCombination(query) == i;
        // cout << "bl : " << bl << endl;
        // 0 da kapali oluosa bl = true , 1 de kapali oluosa bl = false
        // yani kapi bl de acik , !bl de kapali olur
        int l = 0 , r = N-1;
        while(l < r){
            int mid = (l + r) / 2;
            // sol tarafi !bl yap , eger i de duruosak i soldadir
            for(int j = l;j<=mid;j++){
                if(vis[j])continue;
                query[j] = !bl;
            }
            for(int j = mid+1;j<=r;j++){
                if(vis[j])continue;
                query[j] = bl;
            }
            // cout << "range : " << l << " " << mid << " " << r << endl;
            // cout << "asking : ";for(int j = 0;j<N;j++)cout << query[j] << " ";cout << endl;
            // cout << "result : " << tryCombination(query) << endl;
            if(tryCombination(query) == i){
                // cout << "left" << endl;
                r = mid;
            }
            else {
                // cout << "right" << endl;
                l = mid+1;
            }
        }
        // cout << "l : " << l << endl;
        D[l] = i;
        S[l] = bl;
        query[l] = bl;
        vis[l] = 1;
        // cout << endl;
    }
    answer(S , D);
}
#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...