Submission #1262901

#TimeUsernameProblemLanguageResultExecution timeMemory
1262901norman165Super Dango Maker (JOI22_dango3)C++20
7 / 100
3377 ms760 KiB
#include "dango3.h"
#include <bits/stdc++.h>

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
// #define int long long
#define yes() cout << "YES\n"
#define no() cout << "NO\n"

using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;

// const int inf = 1e18;
// const int mod = 1e9 + 7;
// const int maxn = 1e6;
// const int mod1 = 998244353;
// const int mod2 = 1e18 + 1;
// const int mod3 = 1e9 + 9;
// const int mod4 = 333333333;
// const int mod5 = 200000;
// const int mod6 = 10007;
// const int k = 3000;
// const int w = 1e5;
// const ld EPS = 1e-8;

int LOG = 30;

int ask(vector<int> a) {
    return Query(a);
}

void Solve(int n, int m) {
    vector<vector<int>> ans;
    set<int> st;
    int x = m;
    vector<int> next(m);
    int prime = 0;

    for (int i = 0; i < n * m; i++) {
        vector<int> go;
        for (int j = 0; j <= i; j++) go.push_back(j + 1);
        if (ask(go) == prime + 1) {
            next[prime] = i;
            prime++;
        }
    }

    prime = -1;
    while (x--) {
        vector<int> res;
        prime++;

        int l = 0;
        int r = n * m;

        // while (r - l > 1) {
        //     int mid = (l + r) / 2;
        //     vector<int> go;
        //     for (int j = 0; j <= mid; j++) if (!st.count(j)) go.push_back(j + 1);
        //     if (ask(go) > 1) r = mid;
        //     else l = mid;
        // }

        int idx = next[prime];
        res.push_back(idx);
        st.insert(idx);

        int y = n - 1;
        while (y--) {
            l = -1;
            r = idx;

            while (r - l > 1) {
                int mid = (l + r) / 2;
                vector<int> go;

                for (int j = 0; j <= mid; j++) if (!st.count(j)) go.push_back(j + 1);
                for (int& j : res) go.push_back(j + 1);

                if (ask(go) >= 1) r = mid;
                else l = mid;
            }

            idx = l;
            res.push_back(l + 1);
        }
        // for (int i = idx - 1; i >= -1; i--) {
        //     vector<int> go;
        //     for (int j = 0; j <= i; j++) if (!st.count(j)) go.push_back(j + 1);
        //     for (int& j : res) go.push_back(j + 1);
        //     if (ask(go) == 0) {
        //         res.push_back(i + 1);
        //     }
        // }

        for (int& i : res) st.insert(i);
        for (int& i : res) i++;
        ans.push_back(res);
    }

    for (auto& i : ans) Answer(i);
}

// signed main() {
//     // cout.precision(16);
//
//     ios::sync_with_stdio(false);
//     cin.tie(nullptr);
//
//     int t = 1;
//     // cin >> t;
//
//     // while (t--) {
//     //     solve();
//     // }
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...