Submission #1096693

#TimeUsernameProblemLanguageResultExecution timeMemory
1096693gygColors (BOI20_colors)C++17
9 / 100
1 ms596 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define db long double int n; bool qry(int x) { cout << "? " << x << endl; bool ans; cin >> ans; return ans; } void brt() { int ps = 1, drc = +1, dst = n - 1; qry(ps); while (true) { int nw_ps = ps + drc * dst; if (ps == nw_ps || !qry(nw_ps)) { cout << "= " << dst + 1 << endl; return; } ps = nw_ps, drc *= -1, dst--; } assert(false); } bool chck(int st) { int ps = st, drc = -1; int lw = 1, hg = n; while (lw != hg) { // cout << lw << " " << hg << ": " << ps << endl; int md = (lw + hg) / 2; ps += drc * md; if (ps < 1 || n < ps) return false; lw = md + 1; drc *= -1; } return true; } int gt_st() { int st = roundl(n * (db) 2 / 3); for (int i = st - 100; i <= st + 100; i++) if (chck(i)) return i; assert(false); } int bn_srch(int st) { int ps = st, drc = -1; int lw = 1, hg = n; qry(ps); while (lw != hg) { int md = (lw + hg) / 2; ps += drc * md; assert(1 <= ps && ps <= n); if (qry(ps)) hg = md; else lw = md + 1; drc *= -1; } return lw; } signed main() { cin >> n; if (n <= 64) { brt(); exit(0); } int st = gt_st(); int ans = bn_srch(st); cout << "= " << ans << endl; }
#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...