# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
993547 | yellowtoad | Super Dango Maker (JOI22_dango3) | C++17 | 97 ms | 760 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dango3.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
namespace {
vector<int> cur, tmp, ans, v, q;
bool b[10010];
} // namespace
void Solve(int n, int m) {
for (int i = 1; i <= n*m; i++) cur.push_back(i);
random_shuffle(cur.begin(),cur.end());
for (int _ = 1; _ < m; _++) {
int l = 0, r = cur.size()-1;
while (l <= r) {
int mid = (l+r)/2;
q.clear();
for (int i = 0; i <= mid; i++) q.push_back(cur[i]);
if (Query(q)) r = mid-1;
else l = mid+1;
}
int ll = l, rr = r;
b[cur[ll]] = 1;
v = {cur[ll]};
for (int i = 0; i <= rr; i += 8) {
while (1) {
q = v;
for (int j = i+8; j <= rr; j++) if (!b[cur[j]]) q.push_back(cur[j]);
if (Query(q)) break;
tmp.clear();
for (int j = i; j < min(i+8,(int)rr+1); j++) if (!b[cur[j]]) tmp.push_back(cur[j]);
l = 0; r = (int)tmp.size()-1;
while (l < r) {
int mid = (l+r)/2;
q = v;
for (int j = mid+1; j < tmp.size(); j++) q.push_back(tmp[j]);
for (int j = i+8; j <= rr; j++) if (!b[cur[j]]) q.push_back(cur[j]);
if (Query(q)) l = mid+1;
else r = mid;
}
b[tmp[l]] = 1;
v.push_back(tmp[l]);
if (v.size() == n) goto skip;
}
}
skip:;
tmp.clear();
for (int i = 0; i < cur.size(); i++) if (!b[cur[i]]) tmp.push_back(cur[i]);
Answer(v);
cur = tmp;
}
Answer(cur);
}
Compilation message (stderr)
# | 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... |