제출 #678780

#제출 시각아이디문제언어결과실행 시간메모리
678780SamNguyen동굴 (IOI13_cave)C++14
21 / 100
9 ms372 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;

const int MAX = 5000 + 7;
int swit[MAX], door[MAX];

namespace Subtask1 {
    bool exploreCave(int N) {
        iota(door, door + N, 0);
        fill(swit, swit + N, 0);

        int cnt = 0;
        while (cnt <= N) {
            int i = tryCombination(swit);
            if (i == -1) {
                answer(swit, door);
                return true;
            }
            swit[i] ^= 1;
            cnt++;
        }

        return false;
    }
}

namespace Subtask2 {
    bool exploreCave(int N) {
        fill(swit, swit + N, 0);

        for (int i = 0; i < N; i++) {
            swit[i] = 1;
            door[i] = tryCombination(swit);
            swit[i] = 0;
        }
        answer(swit, door);

        return true;
    }
}

namespace Subtask3 {
    bool exploreCave(int N) {
        mt19937 rnd(20050701);
        generate(swit, swit + N, [&]() {
            return rnd() & 1;
        });

        int p = tryCombination(swit);
        while (p != -1) {
            for (int i = 0; i < N; i++) {
                swit[i] ^= 1;
                int p2 = tryCombination(swit);
                if (p2 > p or p2 == -1) {
                    p = p2;
                    break;
                }
                swit[i] ^= 1;
            }
        }

        for (int i = 0; i < N; i++) {
            swit[i] ^= 1;
            door[i] = tryCombination(swit);
            swit[i] ^= 1;
        }
        answer(swit, door);

        return true;
    }
}

void exploreCave(int N) {
    Subtask3::exploreCave(N);
}
#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...