# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
993547 | yellowtoad | Super Dango Maker (JOI22_dango3) | C++17 | 97 ms | 760 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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);
}
컴파일 시 표준 에러 (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... |