Специальная тяжёлая реализация
Ad hoc задачи — это те, чьи решения не относятся ни к одной стандартной алгоритмической категории.
Введение
Каждая задача по сути уникальна — никакую общую технику или хорошо известный алгоритм нельзя напрямую применить для их решения. Они часто встречаются на соревнованиях и нередко относятся к более простым задачам — но не всегда.
Советы по подходу к ad hoc задачам
Поскольку универсальной стратегии не существует, особенно полезны следующие привычки:
Рисуйте маленькие случаи. Экспериментируйте с небольшими или простыми входными данными, чтобы выработать интуицию. Если вы застряли, нарисуйте больше случаев. Если вы не знаете, с чего начать, нарисуйте больше случаев. В большинстве случаев «застрять» означает упустить ключевое наблюдение — а маленькие случаи — самый быстрый способ его найти.
Записывайте наблюдения. Как только что-то кажется полезным, запишите это. Идеи легко забываются, а к записанному наблюдению легко вернуться позже. Оно может оказаться основой решения.
Не зацикливайтесь на одной идее. Если вы не видите, как идея приводит к полному решению, двигайтесь дальше и пробуйте другие подходы. Ad hoc задачи могут отнимать много времени, если вы застрянете на чем-то непродуктивном.
Пробуйте разные перспективы. Экспериментируйте с формулами, рисуйте визуальные представления и продолжайте менять точку зрения, пока что-то не «щёлкнет». Прогресс в ad hoc задачах часто приходит благодаря настойчивости и гибкости, а не из-за единственной вспышки озарения.
Практикуйтесь. Самый эффективный способ улучшить навыки в ad hoc задачах — решить большое их количество. Распознавание шаблонов естественно развивается со временем.
Распространённые категории
Ad hoc задачи охватывают множество тем, но некоторые типы регулярно встречаются на соревнованиях:
Карточные и настольные игры. Задачи с игральными картами часто требуют разбирать масть и ранг из строк. Полезный приём — сопоставить каждой карте целочисленный индекс — например, сопоставить — чтобы сравнения и обращения становились простыми целочисленными операциями. Иногда встречаются и шахматные задачи, например подсчёт расстановок фигур на доске.