# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
229330 |
2020-05-04T08:31:58 Z |
islingr |
ICC (CEOI16_icc) |
C++14 |
|
142 ms |
636 KB |
#include <icc.h>
#include <iostream>
#include <vector>
#define rep(i, a, b) for (auto i = (a); i < (b); ++i)
#define eb(x...) emplace_back(x)
#define sz(x) int((x).size())
using namespace std;
using vi = vector<int>;
using pii = pair<int, int>;
vector<vi> comp;
bool query(vi &a, vi &b) {
if (a.empty() || b.empty()) return false;
return query(sz(a), sz(b), a.data(), b.data());
}
bool query_comp(vi &a, vi &b) {
vi x, y;
for (int c : a) for (int v : comp[c]) x.eb(v);
for (int c : b) for (int v : comp[c]) y.eb(v);
return query(x, y);
}
void merge(int a, int b) {
copy(begin(comp[b]), end(comp[b]), back_inserter(comp[a]));
comp.erase(begin(comp) + b);
}
pii dnc(vi a, vi b) {
if (sz(a) < sz(b)) swap(a, b); // sz(b) <= sz(a)
if (sz(a) == 1 && sz(b) == 1) return {a[0], b[0]};
int mid = (sz(a) + 1)/ 2;
vi l(begin(a), begin(a) + mid), r(begin(a) + mid, end(a));
if (query(l, b)) return dnc(l, b);
return dnc(r, b);
}
void run(int n) {
rep(i, 0, n) comp.eb(vi{i + 1});
rep(i, 1, n) {
int l = 0, r = 1;
if (sz(comp) > 2) {
int axb = 0;
for (int j = 0; (1 << j) <= sz(comp); ++j) {
vi a, b;
rep(k, 0, sz(comp))
if (k & 1 << j) a.eb(k);
else b.eb(k);
if (query_comp(a, b))
axb |= 1 << j;
}
int x; for (x = 0; ~axb & 1 << x; ++x);
l = 1 << x, r = 0;
for (int j = 0; (1 << j) <= sz(comp); ++j) {
if (j == x) continue;
vi a, b;
if (axb & 1 << j) {
rep(k, 0, sz(comp))
if (k & 1 << x) { if (k & 1 << j) a.eb(k); }
else { if (~k & 1 << j) b.eb(k); }
if (query_comp(a, b)) l |= 1 << j;
else r |= 1 << j;
} else {
rep(k, 0, sz(comp))
if (k & 1 << j) {
if (k & 1 << x) a.eb(k);
else b.eb(k);
}
if (query_comp(a, b)) {
l |= 1 << j;
r |= 1 << j;
}
}
}
}
pii p = dnc(comp[l], comp[r]);
merge(l, r);
setRoad(p.first, p.second);
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
512 KB |
Ok! 113 queries used. |
2 |
Correct |
11 ms |
512 KB |
Ok! 110 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
50 ms |
512 KB |
Ok! 640 queries used. |
2 |
Correct |
36 ms |
512 KB |
Ok! 459 queries used. |
3 |
Correct |
38 ms |
512 KB |
Ok! 493 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
137 ms |
632 KB |
Ok! 1523 queries used. |
2 |
Correct |
113 ms |
512 KB |
Ok! 1113 queries used. |
3 |
Correct |
133 ms |
632 KB |
Ok! 1535 queries used. |
4 |
Correct |
140 ms |
512 KB |
Ok! 1503 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
138 ms |
632 KB |
Ok! 1470 queries used. |
2 |
Correct |
136 ms |
512 KB |
Ok! 1431 queries used. |
3 |
Correct |
125 ms |
568 KB |
Ok! 1310 queries used. |
4 |
Correct |
142 ms |
636 KB |
Ok! 1540 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
130 ms |
512 KB |
Ok! 1327 queries used. |
2 |
Correct |
126 ms |
512 KB |
Ok! 1279 queries used. |
3 |
Correct |
119 ms |
512 KB |
Ok! 1232 queries used. |
4 |
Correct |
131 ms |
512 KB |
Ok! 1412 queries used. |
5 |
Correct |
136 ms |
604 KB |
Ok! 1524 queries used. |
6 |
Correct |
131 ms |
512 KB |
Ok! 1460 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
133 ms |
512 KB |
Ok! 1449 queries used. |
2 |
Correct |
118 ms |
512 KB |
Ok! 1132 queries used. |