| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 732127 | nguyentunglam | 도서관 (JOI18_library) | C++17 | 20 ms | 344 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<bits/stdc++.h>
#include <cstdio>
#include <vector>
#include "library.h"
using namespace std;
const int N = 1e5 + 10;
bool taken[N];
int n;
int query(vector<int> v) {
vector<int> ask(n);
for(int &j : v) ask[j - 1] = 1;
return Query(ask);
}
vector<int> operator + (vector<int> a, vector<int> b) {
vector<int> c = a;
for(int &j : b) c.push_back(j);
return c;
}
int Find(vector<int> lst, int x, int y) {
if (lst.size() == 1) return lst[0];
vector<int> Left, Right;
for(int i = 0; i < lst.size(); i++) {
if (i < lst.size() / 2) Left.push_back(lst[i]);
else Right.push_back(lst[i]);
}
vector<int> v1 = {x, y}, v2 = {y};
if (query(Left + v1) + 1 == query(Left + v2)) return Find(Left, x, y);
return Find(Right, x, y);
}
void Solve(int N)
{
n = N;
int l = 1, r = n;
for(int i = 1; i <= n; i++) if (i != l && query({l, i}) == 1) {
r = i;
break;
}
taken[l] = taken[r] = 1;
vector<int> init;
for(int i = 1; i <= n; i++) if (!taken[i]) init.push_back(i);
int tmp = Find(init, l, r);
taken[tmp] = 1;
if (query({tmp, r}) == 1) swap(l, r);
int x, y;
vector<int> f, g, h = {tmp, l, r};
x = tmp; y = l;
while (1) {
vector<int> ask;
for(int i = 1; i <= n; i++) if (!taken[i]) ask.push_back(i);
if (ask.empty()) break;
int idx = Find(ask, x, y);
if (query({idx, x, y}) != 1) break;
y = x;
x = idx;
taken[idx] = 1;
f.push_back(idx);
}
x = r; y = l;
while (1) {
vector<int> ask;
for(int i = 1; i <= n; i++) if (!taken[i]) ask.push_back(i);
if (ask.empty()) break;
int idx = Find(ask, x, y);
cout << idx << endl;
if (query({idx, x, y}) != 1) break;
y = x;
x = idx;
taken[idx] = 1;
g.push_back(idx);
}
reverse(f.begin(), f.end());
Answer(f + h + g);
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
