Submission #1158297

#TimeUsernameProblemLanguageResultExecution timeMemory
1158297lopkusSuper Dango Maker (JOI22_dango3)C++20
7 / 100
237 ms640 KiB
#include "dango3.h"

#include <bits/stdc++.h>

using namespace std;

void Solve(int N, int M) {
  vector<int> current;
  for(int i = 1; i <= N * M; i++) {
    current.push_back(i);
  }
  vector<int> have;
  int cnt = N * M;
  while(current.size() > N) {
    while(have.size() < N) {
      int l = 0, r = M, p = - 1;
      while(l <= r) {
        int mid = (l + r) / 2;
        if(mid * N > current.size()) {
          r = mid - 1;
          continue;
        }
        vector<int> ask;
        for(auto x : have) {
          ask.push_back(x);
        }
        for(int i = 0; i < N * mid; i++) {
          ask.push_back(current[i]);
        }
        if(!Query(ask)) {
          l = mid + 1;
          p = mid;
        }
        else {
          r = mid - 1;
        }
      }
      l = N * p, r = min((int)current.size() - 1, N * p + N - 1), p = - 1;
      while(l <= r) {
        int mid = (l + r) / 2;
        vector<int> ask;
        for(auto x : have) {
          ask.push_back(x);
        }
        for(int i = 0; i <= mid; i++) {
          ask.push_back(current[i]);
        }
        if(Query(ask) >= 1) {
          r = mid - 1;
          p = mid;
        }
        else {
          l = mid + 1;
        }
      }
      have.push_back(current[p]);
      current.erase(current.begin() + p);
    }
    Answer(have);
    have.clear();
  }
  Answer(current);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...