Во всех таких задачах на запросы почти всегда надо приспособить бинарный поиск.
Так и тут. Перебирайте длину круга бинарным поиском. И запоминайте, сколько метров вы уже прошли и сколько полных кругов получили в ответ.
Вот у вас есть гипотеза m=(l+r)/2 - вы хотите проверить, а как она соотносится с длинной круга. Допустим, вы уже прошли x метров и прошли k полных кругов. Уже только из этой информации можно оценить, какая длина круга может быть. Во-первых, убедитесь, сравните floor(x/m)
и k
. Если floor(x/m) > k вы уже знаете, что длина круга больше m, ведь для круга длины m и более коротких значений вы бы насчитали floor(x/m) или больше оборотов. Если floor(x/m) < k, то уже очевидно, что длина круга меньше m. Если же floor(x/m) = k, то спросите run m-x%m
- сколько осталось пройти до финиша, если бы длина круга была равна m. Если вы получили в ответ 1, то значит круг не длинее m. В протвином случае круг строго длиннее m.