Submission #810321

#TimeUsernameProblemLanguageResultExecution timeMemory
810321ymmColors (BOI20_colors)C++17
0 / 100
3057 ms256 KiB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

set<ll> S;
bool query(ll x)
{
	assert(!S.count(x));
	S.insert(x);
	int d;
	printf("? %lld\n", x+1);
	fflush(stdout);
	scanf("%d", &d);
	return d;
}


int main()
{
	ll n;
	scanf("%lld", &n);
	//ll pos = __lg(n-1)+1;
	//query(pos);
	//ll l = 1, r = n;
	//while (l < r) {
	//	ll m0 = (l+r)/2;
	//	ll m;
	//	for (ll i = 0;; ++i) {
	//		ll dard = i%2? i/2+1: -i/2;
	//		ll pos2 = pos + m0 + dard;
	//		if (pos2 < 0 || n <= pos2 || S.count(pos2))
	//			continue;
	//		m = m0+dard;
	//		break;
	//	}
	//	if (query(pos + m)) {
	//		r = m;
	//		pos = pos + m;
	//	} else {
	//		l = m+1;
	//		while (S.count(pos))
	//			--pos;
	//		query(pos);
	//	}
	//}
	ll pos = n/3;
	query(pos);
	ll l = 1, r = n;
	int lst = 0;
	while (l < r) {
		ll m0 = (l+r)/2;
		ll x = lst%2? -1: 1;
		//cerr << l << ' ' << r << ' ' << pos+1 << ' ' << m0 << '\n';
		ll m;
		for (ll i = 0;; ++i) {
			ll dard = i%2? i/2+1: -i/2;
			//ll dard = i%2? -i/2+1: i/2;
			ll pos2 = pos + x*(m0+dard);
			if (pos2 < 0 || n <= pos2 || S.count(pos2))
				continue;
			m = m0+dard;
			break;
		}
		if (query(pos = pos + x*m))
			r = m;
		else
			l = m+1;
		++lst;
	}
	printf("= %lld\n", l);
}

Compilation message (stderr)

Colors.cpp: In function 'bool query(ll)':
Colors.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |  scanf("%d", &d);
      |  ~~~~~^~~~~~~~~~
Colors.cpp: In function 'int main()':
Colors.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |  scanf("%lld", &n);
      |  ~~~~~^~~~~~~~~~~~
#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...