#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
#define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl;
const int X = 32;
//Query Count: N * N * M / X + N * M * X
vector<int> concat(vector<int> a, vector<int> b){
vector<int> ret = a;
for (auto it : b) ret.push_back(it);
for (auto &it : ret) it++;
return ret;
}
void Solve(int N, int M) {
swap(N,M);
vector<bool> decided(N * M, false);
vector<vector<int>> dango(M);
for (int i = 0; i < M; i++){
vector<int> cur;
for (int j = 0; j < N * M; j++){
if (decided[j]) cur.push_back(j);
}
vector<int> h;
function<void(int,int,int)> solve = [&](int l, int r, int c)->void{
if (c == 0) return;
vector<int> fail;
for (int i = 0; i < h.size(); i++){
fail.push_back(h[i]);
if (Query(concat(cur, fail))){
decided[h[i]] = true;
fail.pop_back();
}
}
return;
};
for (int j = 0; j < N * M; j++){
if (decided[j]) continue;
h.push_back(j);
if (h.size() == X){
solve(0,h.size()-1,Query(concat(cur,h)));
for (auto it : h){
if (decided[it]) dango[i].push_back(it);
else cur.push_back(it);
}
h.clear();
}
}
if (h.size() > 0){
solve(0,h.size()-1,Query(concat(cur,h)));
for (auto it : h){
if (decided[it]) dango[i].push_back(it);
else cur.push_back(it);
}
h.clear();
}
}
for (int i = 0; i < N; i++){
vector<int> a;
for (int j = 0; j < M; j++){
a.push_back(dango[j][i]+1);
}
Answer(a);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |