Problem B
Червячьи радости
Languages
de
en
et
is
lt
lv
no
pl
ru
sv
Вы решили вывести своего домашнего червячка Максимку на
выгул и хотели бы найти для него оптимальное место в земле. В
поиске идеального места вы решили ограничиться областью
пространства в форме параллелограма размерами
Максимка любит влажные места, и поэтому вы должны поместить его в клетку, влажность которой как минимум не меньше влажности всех соседних клеток (иначе он уползет в соседнюю, более влажную клетку, и его потом будет сложно найти). Другими словами, вам нужно поместить Максимку в клетку-локальный максимум по влажности.
Строго говоря, требуется найти клетку
Значение влажности вне пределов выбранной области
пространства считаем равным
Количество клеток, однако, может быть довольно большим, и вам не хотелось бы измерять влажность для всех из них. В этой задаче вы можете взаимодействовать с программой-оценивателем, запрашивая влажность в выбранных клетках по одной. Как только вы нашли подходящее место для Максимки, сообщите его оценивателю и завершите работу.
Интерактивность
На первой строке ввода даны четыре положительные числа:
После этого вы можете вывести не более
После совершения необходимого числа запросов, ваша программа
должна вывести ровно одну строку вида ! x
y z. Это соответствует утверждению, что клетка
Все значения
Вы обязаны всегда сбрасывать (flush) буфер стандартного вывода перед зачитыванием следующего ввода, иначе оцениватель может зависнуть в ожидании результата, и ваша программа получит оценку Time Limit Exceeded. Сбрасывание буфера реализуется в различных языках следующим образом:
-
Java: System.out.println() автоматически сбрасывает буфер.
-
Python: print() автоматически сбрасывает буфер.
-
C++: cout << endl; выводит новую строку и сбрасывает буфер. При использовании printf, буфер сбрасывается командой fflush(stdout).
-
Pascal: Flush(Output).
Чтобы помочь в реализации взаимодействия с оценивателем, мы предоставляем вспомогательные примеры кода, которые вы можете скопировать к себе в программу. Ссылка на этот код для всех поддерживаемых языков (C++, Pascal, Java, Python) находится на боковой панели страницы задачи в системе Kattis.
Мы особенно рекомендуем использовать этот код, если вы программируете на Java или Python, где процедуры ввода-вывода по умолчанию могут быть недостаточно быстрыми для решения последних двух групп тестов. Вспомогательный код использует оптимизированные алгоритмы ввода-вывода, скорость которых достаточна для реализации корректного решения.
Алгоритм оценивания не является адаптивным. Это значит, что каждому тесту соответствует фиксированный набор значений влажности, который не зависит от того, какие измерения совершает программа.
Ограничения
Тесты разделены на группы. Очки за группу даются только если корректно решены все тесты в группе.
Группа |
Очки |
Ограничения |
1 |
10 |
|
2 |
22 |
|
3 |
12 |
|
4 |
19 |
|
5 |
14 |
|
6 |
23 |
|
Пример диалога
В примере ниже область имеет размеры
Т.к.
JUDGE: 3 1 1 3 YOU: ? 3 1 1 JUDGE: 13 YOU: ? 2 1 1 JUDGE: 14 YOU: ? 1 1 1 JUDGE: 10 YOU: ! 2 1 1