Submission #1101669

#TimeUsernameProblemLanguageResultExecution timeMemory
1101669NoMercyColors (BOI20_colors)C++17
0 / 100
1 ms336 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int ask (ll x) {
	cout << "? " << x << endl;
	int res;
	cin >> res;
	return res;
}

int32_t main () {

	// ios_base::sync_with_stdio(0); 
	// cin.tie(0); 
	// cout.tie(0); 

	ll N;
	cin >> N;
	ll ind = 1, dir = 1, cur = 1;
	ll lo = 1, hi = N;
    while (lo < hi) {
        ll mid = (lo + hi) >> 1;
        if (cur + dir * mid >= 1) {
			cur += dir * mid;
		} else {
			ind += 1 - (cur + dir * mid);
			cur = 1;
		}
        lo = mid + 1;
        dir = -dir;
    }
    ask (ind);
	lo = 1;
	hi = N;
	while (lo < hi) {
		ll mid = (lo + hi) >> 1;
		// cout << lo << " " << mid << " " << hi << " " << ind << "\n";
		if (ind - mid >= 1) {
			if (ask (ind - mid) == 1) {
				hi = mid;
			} else {
				lo = mid + 1;
			}
			ind = ind - mid;
		} else if (ind + mid <= N) {
			if (ask (ind + mid) == 1) {
				hi = mid;
			} else {
				lo = mid + 1;
			}
			ind = ind + mid;
		} else {
			if (ind - 1 >= N - ind) {
				if (ask(1) == 1) {
					hi = ind - 1;
				} else {
					lo = ind;
				}
				ind = 1;
			} else {
				if (ask(N) == 1) {
					hi = N - ind;
				} else {
					lo = N - ind + 1;
				}
				ind = N;
			}
		}
	}
	cout << "= " << hi << 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...