제출 #418742

#제출 시각아이디문제언어결과실행 시간메모리
418742dxz05동굴 (IOI13_cave)C++14
100 / 100
931 ms580 KiB
#include "cave.h"
#include <bits/stdc++.h>

using namespace std;

void exploreCave(int N) {
    int comb[N], S[N], D[N];
    fill(S, S + N, -1);

    vector<int> free;
    for (int i = 0; i < N; i++) free.push_back(i);

    for (int i = 0; i < N; i++){
        int ind = 0;

        for (int j = 0; j < N; j++){
            comb[j] = (S[j] != -1 ? S[j] : 0);
        }

        int res = tryCombination(comb);
        int x;

        if (res == -1 || res > i) x = 0; else
            x = 1;

        int l = 0, r = free.size() - 1;
        while (l <= r){
            int mid = (l + r) >> 1;

            for (int j = 0; j < N; j++){
                if (S[j] != -1){
                    comb[j] = S[j];
                    continue;
                }
                if (j <= free[mid]) comb[j] = x ^ 1; else
                    comb[j] = x;
            }

            res = tryCombination(comb);
            if (res == i){
                ind = mid;
                r = mid - 1;
            } else l = mid + 1;

        }

        int pos = free[ind];

        S[pos] = x;
        D[pos] = i;

        //cout << "val=" << i << "\tS=" << x << ' ' << "\tD=" << pos << endl;

        free.erase(free.begin() + ind, free.begin() + ind + 1);

    }

    answer(S, D);
}

/*
4
1 1 1 0
3 1 0 2

5
0 1 0 1 0
2 4 0 1 3
*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…