Submission #229294

#TimeUsernameProblemLanguageResultExecution timeMemory
229294islingrICC (CEOI16_icc)C++14
0 / 100
11 ms512 KiB
#include "icc.h" #include <cassert> #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()) #define trav(x, v) for (auto &x : v) #define all(x) begin(x), end(x) #define ff first #define ss second 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; trav(c, a) trav(v, comp[c]) x.eb(v); trav(c, b) trav(v, comp[c]) y.eb(v); return query(x, y); } void merge(int a, int b) { copy(all(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 half = (sz(a) + 1)/ 2; vi l(begin(a), begin(a) + half), r(begin(a) + half, end(a)); assert(!l.empty() && !r.empty()); if (query(l, b)) return dnc(l, b); else 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 = x + 1; (1 << j) <= sz(comp); ++j) { if (axb & 1 << j) { vi a, b; 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 { vi a, b; 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; } } } } auto p = dnc(comp[l], comp[r]); merge(l, r); setRoad(p.ff, p.ss); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...