제출 #1271262

#제출 시각아이디문제언어결과실행 시간메모리
1271262Double_SlashSuper Dango Maker (JOI22_dango3)C++20
100 / 100
109 ms664 KiB
#include "dango3.h"
#include <bits/stdc++.h>

using namespace std;
#define all(x) x.begin(), x.end()

void Solve(int N, int M) {
    bool dead[N * M + 1]{};
    for (int t = M; t--;) {
        vector<int> rem;
        for (int i = 1; i <= N * M; ++i) {
            if (not dead[i]) rem.emplace_back(i);
        }
        shuffle(all(rem), random_device());
        vector<int> a;
        for (int i = N, last = rem.size(); i--;) {
            auto q = [&] (int j) {
                if (j < N - (int) a.size()) return false;
                vector<int> b(rem.begin(), rem.begin() + j);
                b.insert(b.end(), all(a));
                return !!Query(b);
            };
            int j = last;
            for (int k = q(j - 4) ? 2 << __lg(j -= 4) : 4; k >>= 1;) j -= q(j - k) * k;
            a.emplace_back(rem[last = j - 1]);
        }
        for (int i: a) dead[i] = true;
        Answer(a);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...