Submission #661268

#TimeUsernameProblemLanguageResultExecution timeMemory
661268Alex_tz307Super Dango Maker (JOI22_dango3)C++17
0 / 100
3253 ms1056 KiB
#include <bits/stdc++.h>
#include "dango3.h"

using namespace std;

const int kLog = 4;

void Solve(int N, int M) {
  vector<vector<int>> groups(M);
  auto check = [&](const vector<int> &a) -> bool {
    vector<bool> mark(1 + N * M);
    for (const int &x : a) {
      mark[x] = true;
    }
    vector<int> q;
    for (int i = 1; i <= N * M; ++i) {
      if (!mark[i]) {
        q.emplace_back(i);
      }
    }
    int res = M - Query(q);
    return (res == 2);
  };
  for (int i = 1; i <= N * M; ++i) {
    int colour = 0;
    if (i != 1) {
      for (int k = kLog; k >= 0; --k) {
        int newColour = (colour | (1 << k));
        groups[newColour - 1].emplace_back(i);
        if (newColour < M && check(groups[newColour - 1])) {
          colour = newColour;
        }
        groups[newColour - 1].pop_back();
      }
    }
    groups[colour].emplace_back(i);
  }
  for (int i = 0; i < M; ++i) {
    Answer(groups[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...