Submission #1273082

#TimeUsernameProblemLanguageResultExecution timeMemory
1273082IcelastSuper Dango Maker (JOI22_dango3)C++20
100 / 100
476 ms600 KiB
#include "dango3.h"

#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 2*1e5+5, INF = 4e18+9;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rand rd

long long rd(long long l, long long h) {
    return l + rng() % (h - l + 1);
}

namespace {

int variable_example = 1;

}  // namespace

void Solve(int N, int M) {
    vector<int> p(N*M+1);
    iota(p.begin()+1, p.end(), 1);
    vector<bool> gone(N*M+1, false);
    for(int i = 1; i <= M; i++){
        shuffle(p.begin()+1, p.end(), rng);
        int l = 1, r = N*M, mid;
        while(l <= r){
            mid = (l+r)/2;
            vector<int> x;
            for(int ii = 1; ii <= mid; ii++){
                int i = p[ii];
                if(gone[i]) continue;
                x.push_back(i);
            }
            if(Query(x)){
                r = mid-1;
            }else{
                l = mid+1;
            }
        }
        vector<bool> ban(N*M+1, false);
        for(int ii = 1; ii <= l; ii++){
            int i = p[ii];
            if(gone[i]) continue;
            ban[i] = true;
            vector<int> x;
            for(int ii = 1; ii <= l; ii++){
                int i = p[ii];
                if(gone[i]) continue;
                if(ban[i]) continue;
                x.push_back(i);
            }
            if(Query(x) == 0){
                ban[i] = false;
            }
        }
        vector<int> x;
        for(int ii = 1; ii <= l; ii++){
            int i = p[ii];
            if(gone[i]) continue;
            if(ban[i]) continue;
            gone[i] = true;
            x.push_back(i);
        }
        Answer(x);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...