Submission #552776

#TimeUsernameProblemLanguageResultExecution timeMemory
552776d4xn동굴 (IOI13_cave)C++17
0 / 100
220 ms404 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 5000;

int n;
int s[N];
int d[N];
vector<bool> vis; // switch que no puedo tocar
int cnt; // numero de switchs que me quedan por tocar

int find(int i) {
    // cual es el switch que corresponde a la puerta i
    // cambiar los mid primeros switchs
    // si la puerta cambia buscar en los que he cambiado
    // si no buscar en los que no he cambiado
    int l = 1;
    int r = cnt;
    bool abierta = tryCombination(s) > i;
    while (l < r) {
        int mid = cnt/2;

        int s2[N];
        for (int j = 0; j < n; j++) {
            s2[i] = s[i];
        }
        
        int temp = 1;
        for (int j = 0; j < n && temp <= mid; j++) {
            if (vis[j]) continue;
            if (temp >= l) s2[j] = !s2[j];
            temp++;
        }

        if (tryCombination(s2) > i) {
            if (!abierta) {
                r = mid;
            }
            else {
                l = mid+1;
            }
        }
        else {
            if (abierta) {
                r = mid;
            }
            else {
                l = mid+1;
            }
        }
    }

    return l;
}

void exploreCave(int nn) {
    n = nn;
    vis.resize(n, 0);
    cnt = n;

    for (int i = 0; i < n; i++) {
        int x = find(i);
        d[x] = i;

        s[x] = 0;
        if (tryCombination(s) == i) {
            s[x] = 1;
        }
        else {
            s[x] = 0;
        }

        vis[x] = 1;
        cnt--;
    }

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