Advertisement
erek1e

BOI '20 - Colors

Jun 30th, 2023
1,180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. bool query(long long p) {
  6.     cout << "? " << p << endl;
  7.     bool b; cin >> b;
  8.     return b;
  9. }
  10.  
  11. int main() {
  12.     int tests; cin >> tests;
  13.     while (tests--) {
  14.         long long n; cin >> n;
  15.  
  16.         long long delta = 0;
  17.         // simulate binary search where answer is n
  18.         long long left = 0, right = n;
  19.         for (int sign = 1; left+1 < right; sign = -sign) {
  20.             long long mid = (left + right) / 2;
  21.             delta += sign * mid;
  22.             left = mid;
  23.         }
  24.  
  25.         // start at k: k + delta = 1 (k = 1-delta) or k + delta = n (k = n-delta)
  26.         long long k = -delta;
  27.         if (k < 0) k += n;
  28.         else k += 1;
  29.  
  30.         // perform binary search
  31.         query(k);
  32.         left = 0, right = n;
  33.         for (int sign = 1; left+1 < right; sign = -sign) {
  34.             long long mid = (left + right) / 2;
  35.             k += sign * mid;
  36.             if (query(k)) right = mid;
  37.             else left = mid;
  38.         }
  39.         cout << "= " << right << endl;
  40.     }
  41.     return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement