Submission #1232026

#TimeUsernameProblemLanguageResultExecution timeMemory
1232026kaltspielerhyCave (IOI13_cave)C++20
100 / 100
164 ms528 KiB
#include <bits/stdc++.h>
#include "cave.h"
using namespace std;

void exploreCave(int N) {
    int result[N];
    int seen[N];
    fill(result, result+N, -1);
    fill(seen, seen+N, -1);

    for (int iDoor = 0; iDoor < N; iDoor++) {
        int list[N];
        for (int iVal = 0; iVal < N; iVal++) {
            if (seen[iVal] == -1) list[iVal] = 0;
            else list[iVal] = seen[iVal];
        }
        int zero = tryCombination(list);
        int num;
        if (zero > iDoor || zero == -1) {
            num = 0;
            for (int iVal = 0; iVal < N; iVal++) {
                if (seen[iVal] == -1) list[iVal] = 1;
                else list[iVal] = seen[iVal];
            }
        }
        else {
            num = 1;
        }

        int deb = 0, fin = N-1;
        while (deb < fin) {
            int mid = (deb+fin)/2;

            for (int i = deb; i <= mid; i++) {
                if (seen[i] == -1) list[i] = num;
            }

            int result = tryCombination(list);
            if (result > iDoor || result == -1) {
                fin = mid;
                for (int i = deb; i <= mid; i++) {
                    if (seen[i] == -1) list[i] = (num+1)%2;
                }
            }
            else {
                deb = mid+1;
            }
        }

        result[deb] = iDoor;
        seen[deb] = num;
    }

    // for (int i = 0; i < N; i++) cout << seen[i] << ' ';
    // cout << '\n';
    // for (int i = 0; i < N; i++) cout << result[i] << ' ';
    // cout << '\n';
    answer(seen, result);
}
#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...