제출 #1149054

#제출 시각아이디문제언어결과실행 시간메모리
1149054anmattroiICC (CEOI16_icc)C++17
컴파일 에러
0 ms0 KiB
#include "icc.h" #include <bits/stdc++.h> using namespace std; bool ask(vector<int> X, vector<int> Y) { return query(X.size(), Y.size(), X.data(), Y.data()); } int N, Q; vector<vector<int> > components; inline constexpr int bit(const int &x, const int &i) {return (x>>i&1);} int cnt = 0; int calc_fork() { int mask = 0; int sz = components.size(); int P = __lg(sz-1); for (int o = 0; o <= P; o++) { vector<int> JOI, KOI; for (int i = 0; i < sz; i++) if (bit(i,o)) for (int z : components[i]) JOI.emplace_back(z); else for (int z : components[i]) KOI.emplace_back(z); assert((++cnt) <= Q); mask += ((ask(JOI, KOI)) << o); } return mask; } void solve() { int mask = calc_fork(); int A = 0, B = 0; int P = __lg(mask); int sz = components.size(); assert(bit(mask, P)); B += (1<<P); for (int o = 0; o <= __lg(sz-1); o++) { if (o == P) continue; if (mask>>o&1) { vector<int> BAOI, BOI; for (int i = 0; i < sz; i++) { if (!bit(i, o) && !bit(i, P)) for (int z : components[i]) BAOI.emplace_back(z); if (bit(i, o) && bit(i, P)) for (int z : components[i]) BOI.emplace_back(z); } assert((++cnt) <= Q); if (ask(BAOI, BOI)) B += (1<<o); else A += (1<<o); } else { vector<int> IMO, IOI; for (int i = 0; i < sz; i++) { if (!bit(i, o) && !bit(i, P)) for (int z : components[i]) IMO.emplace_back(z); if (!bit(i, o) && bit(i, P)) for (int z : components[i]) IOI.emplace_back(z); } assert((++cnt) <= Q); if (!ask(IMO, IOI)) { A += (1<<o); B += (1<<o); } } } vector<int> Dubious = components[A], Furious = components[B]; int lo = -1, hi = Furious.size()-1; while (hi - lo > 1) { int mid = (lo + hi) >> 1; assert((++cnt) <= Q); if (ask(Dubious, vector<int>(Furious.begin(), Furious.begin()+mid+1))) hi = mid; else lo = mid; } int Totally_it_bro = Furious[hi]; lo = -1, hi = Dubious.size()-1; while (hi - lo > 1) { int mid = (lo + hi) >> 1; assert((++cnt) <= Q); if (ask(vector<int>(Dubious.begin(), Dubious.begin()+mid+1), Furious)) hi = mid; else lo = mid; } int You_got_it = Dubious[hi]; setRoad(Totally_it_bro, You_got_it); for (int i : Furious) Dubious.emplace_back(i); components[A] = Dubious; components.erase(components.begin() + B); } void play_game(int n, int q) { components.clear(); components.shrink_to_fit(); N = n; Q = q; cnt = 0; for (int i = 1; i <= n; i++) components.push_back({i}); for (int i = 1; i < n; i++) solve(); }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccmkLTeQ.o: in function `main':
grader.cpp:(.text.startup+0x17): undefined reference to `run'
collect2: error: ld returned 1 exit status