Submission #254780

#TimeUsernameProblemLanguageResultExecution timeMemory
254780model_codeColors (BOI20_colors)C++11
100 / 100
3 ms328 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll find_starting_point(ll size) { vector<ll> jumps; ll L = 1; while (L < size) { ll mid = L + (size - L + 1) / 2 - 1; jumps.push_back(mid); L = mid + 1; } ll epos = size; int dir = -1; reverse(jumps.begin(), jumps.end()); for (auto t : jumps) { epos = epos + dir * t; dir = dir * -1; } if (dir == 1) return epos; return size - epos + 1; } ll solve_log(ll N, function<bool(ll)> query) { // Jump from Y + X to Y // If 1 // Do solution X starting from y // If 0 // Do solution (N - X) starting from y and expanding each query by Y ll size = N; ll pos = find_starting_point(N); query(pos); ll add = 0; ll dir = 1; while (size > 1) { ll jump_sz = size / 2; ll inc_jump_sz = jump_sz + add; pos = pos + inc_jump_sz * dir; bool answ = query(pos); if (answ) { size = jump_sz; } else { size = size - jump_sz; add += jump_sz; } dir = dir * -1; } return add + 1; } bool query(ll pos) { int inp; cout << "? " << pos << endl; cin >> inp; return inp == 1; } bool answer(ll pos) { cout << "= " << pos << endl; exit(0); } int main() { ll N; cin >> N; answer(solve_log(N, query)); }
#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...