Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
108766008 Дорешивание:
duyiblue
1470C - 37 C++17 (GCC 9-64) Полное решение 46 мс 16 КБ 2021-03-01 06:13:05 2021-03-01 06:13:05
→ Исходный код
// problem: CF1470C
#include <bits/stdc++.h>
using namespace std;

#define mk make_pair
#define fi first
#define se second
#define SZ(x) ((int)(x).size())

typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;

template<typename T> inline void ckmax(T& x, T y) { x = (y > x ? y : x); }
template<typename T> inline void ckmin(T& x, T y) { x = (y < x ? y : x); }

const int MAXN = 1e5;
int n, K;

int ask(int i) {
	
	if (i > n) {
		i -= n;
	}
	
	cout << "? " << i << endl;
	int x;
	cin >> x;
	return x;
}

void report(int i) {
	if (i > n) {
		i -= n;
	}
	cout << "! " << i << endl;
}

int main() {
	cin >> n >> K;
	int len = ((n <= 900) ? 1 : 400);
	for (int i = 1; i <= len; ++i) {
		ask(1);
	}
	int l = 0, r = 0;
	for (int i = 1; i <= n; i += len) {
		int x = ask(i);
		if (x > K) {
			r = i;
		}
		if (x < K) {
			l = i;
		}
	}
	
	assert(l != 0);
	assert(r != 0);
	
	if (r < l) {
		r += n;
	}
	assert(l + 1 < r);
	++l;
	--r;
	while (l < r) {
		int mid = (l + r) >> 1;
		int x = ask(mid);
		if (x == K) {
			report(mid);
			return 0;
		} else if (x > K) {
			r = mid - 1;
		} else {
			l = mid + 1;
		}
	}
	report(l);
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования