Решение задачи Настольный теннис с Codeforces
С пояснением   Просмотров: 1968
Про каждого из участников вы знаете его силу игры в теннис, и у всех игроков они различны. В партии всегда побеждает игрок с большей силой. Определите, кто станет победителем.
Пояснение к задаче
Не очень сложно решить эту задачу за O(k + n). Условие даже подсказывает, что для этого подходит структура данных очередь. Для этого нужно поддерживать очередь участников, текущего победителя и количество побед у него. Каждая партия обрабатывается за O(1). Можно доказать, что число партий не превосходит n + k.
Конечно, такое решение слишком медленное. Давайте подумаем, что будет происходить при большом k. Точнее, пусть k ≥ n - 1. Чтобы стать победителем, нужно одержать не менее n - 1 побед подряд, то есть нужно выиграть у всех остальных игроков. Значит, победителем станет игрок с максимальной силой.
Таким образом, если k ≥ n - 1, мы умеем решать задачу за O(1), а иначе можно запустить симуляцию, описанную в начале, и она будет работать за O(n).
Автор: Администратор