Submission #1030356

#TimeUsernameProblemLanguageResultExecution timeMemory
1030356kunzaZa183Colors (BOI20_colors)C++17
9 / 100
1 ms596 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a_;
int ask(int c) {
  printf("? %lld\n", c);
  fflush(stdout);
  scanf("%lld", &a_);
  return a_;
}
void report(int C) {
  printf("= %lld\n", C);
  fflush(stdout);
  exit(0);
}
signed main() {
  int n = 1e18;
  cin >> n;
  if (n <= 64) {
    if (n == 1) report(1);
    ask(1);
    if (!ask(n)) report(n);
    for (int r = n - 1, l = 2, d = n - 1, i = 1, cc = 0; cc < n - 2;
         ++i, --d, ++cc)
      if (i % 2 && !ask(l++))
        report(d);
      else if (i % 2 == 0 && !ask(r--))
        report(d);
    report(1);
    return 0;
  }
  vector<int> precomp;
  int l = 1, r = n;
  while (l < r) {
    precomp.push_back((l + r) / 2);
    l = (l + r) / 2 + 1;
  }
  int cur = n;
  int left = 1;
  reverse(precomp.begin(), precomp.end());
  for (auto a : precomp) {
    if (left == 0) {
      cur += a;
      left = 1;
    } else if (left == 1) {
      cur -= a;
      left = 0;
    }
  }
  int tmpcur = cur, tmpleft = left;

  // for (int ans = 1e18; ans >= 1e18 - 1e6; ans--) {
  //   if (ans % 100 == 0) cout << ans << " ";
  int res;
  cout << "? " << cur << endl;
  cin >> res;
  cur = tmpcur, left = tmpleft;

  set<int> si;
  si.insert(cur);

  l = 1, r = n;
  while (l < r) {
    int mid = (l + r) / 2;
    int guess;
    if (left) {
      guess = cur - mid;
      left = 0;
    } else {
      guess = cur + mid;
      left = 1;
    }
    if (si.count(guess)) {
      while (1) {
      }
      // cout << "FAILED " << ans << '\n';
      return 0;
    }
    si.insert(guess);
    cur = guess;
    // if (mid >= ans)
    //   r = mid;
    // else
    //   l = mid + 1;
    cout << "? " << cur << endl;
    cin >> res;
    if (res)
      r = mid;
    else
      l = mid + 1;
  }
  cout << "= " << l << endl;
  // if (l != ans) {
  //   cout << "WRONG " << ans << ' ' << l << '\n';
  //   return 0;
  // }
  // }
}

Compilation message (stderr)

Colors.cpp: In function 'long long int ask(long long int)':
Colors.cpp:8:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 |   scanf("%lld", &a_);
      |   ~~~~~^~~~~~~~~~~~~
#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...