Submission #951821

#TimeUsernameProblemLanguageResultExecution timeMemory
951821EJIC_B_KEDAXSuper Dango Maker (JOI22_dango3)C++17
100 / 100
101 ms792 KiB
#include <bits/stdc++.h>
#include "dango3.h"

using ll = long long;

using namespace std;

mt19937_64 mt(chrono::high_resolution_clock::now().time_since_epoch().count());

void Solve(int n, int m) {
    vector<int> have(n * m);
    for (int i = 0; i < n * m; i++) {
        have[i] = i + 1;
    }
    for (int _ = 0; _ < m; _++) {
        shuffle(have.begin(), have.end(), mt);
        vector<int> nw;
        int l = n - 2, r = (int)have.size() - 1;
        while (r - l > 1) {
            int mid = (r + l) / 2;
            nw.clear();
            for (int i = 0; i <= mid; i++) {
                nw.push_back(have[i]);
            }
            if (Query(nw)) {
                r = mid;
            } else {
                l = mid;
            }
        }
        nw.clear();
        for (int i = 0; i <= r; i++) {
            nw.push_back(have[i]);
        }
        for (int i = 0; i < nw.size() && nw.size() > n; i++) {
            int tmp = nw[i];
            swap(nw[i], nw.back());
            nw.pop_back();
            if (!Query(nw)) {
                nw.push_back(tmp);
                swap(nw[i], nw.back());
            } else {
                i--;
            }
        }
        Answer(nw);
        unordered_set<int> st;
        vector<int> have2;
        for (int i : nw) {
            st.insert(i);
        }
        for (int i : have) {
            if (st.find(i) == st.end()) {
                have2.push_back(i);
            }
        }
        swap(have, have2);
    }
}

Compilation message (stderr)

dango3.cpp: In function 'void Solve(int, int)':
dango3.cpp:35:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         for (int i = 0; i < nw.size() && nw.size() > n; i++) {
      |                         ~~^~~~~~~~~~~
dango3.cpp:35:52: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   35 |         for (int i = 0; i < nw.size() && nw.size() > n; i++) {
      |                                          ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...