Гена Короткевич: My strategy at AtCoder & CS Academy
Авторские разборы задач Гены (январь 2018)
Перевод фрагмента:
Мне очень нравится стратегическая часть соревнований по программированию.
Хотя, конечно, решение задач является более важной.
Моя стратегия "кодировать после придумывания решений нескольких задач" - коротко:
1. Прочитать все задачи. Обычно, начиная с последней, но это не важно.
2. Во время чтения каждой из задач понять, что в ней требуется найти, думаю об этом минуту.
3. Начинаю думать о задачах в случайном порядке, часто перескакивая с одной задачи на другую.
4. Пытаюсь добиться прогресса или посмотреть на задачу с другой перспективы каждый раз, когда возвращаюсь
к ней. Для простых задач это означает решить с первой попытки.
5. Смотрю на таблицу результатов, чтобы понять количество времени, которые типично тратятся участниками на
каждую из задач. Это помогает понять, надо ли искать простое решение.
6. В некоторый момент я чувствую себя застрявшим в каждой из задач, которые ещё не решил (возможно пустое
множество).
Обычно это случается в первой половине контеста.
Кодирую придуманные решения задач в любом удобном порядке.
Посылаю их.
Здесь возможны два варианта:
- посылать решение каждой задачи в отдельности
- или посылать все сразу после кодирования всех.
Я использую оба. И я думаю, что это не имеет большого значения.
Во втором варианте плюсы заключаются в следующем:
- получение WA в одном решении не влияет на меня при кодировании других решений
- экономия времени на обновлении страницы с протоколом отсылки
7. Стараюсь решить остальные задачи, снова прыгая между задачами, если их более чем одна.
Но проводя больше времени с каждой задачей.
Если придумал решение какой-то задачи - кодирую и отсылаю.
Мне кажется, такая стратегия имеет один значительный недостаток
- увеличение штрафного времени по сравнению со стандартным циклом
- придумал - реализовал - отослал - перешёл к следующей задаче
С другой стороны я вижу множество преимуществ.
Первое и главное для меня:
- оно комфортно для меня
Я знаю, что для многих людей очень тяжело и невыгодно переключаться между задачами
слишком часто, поскольку требуется время, чтобы "изменить контекст".
Но мне кажется, это помогает мне приходить к новым идеям быстрее.
Возможно также за счёт "подсознательного мышления", или просто помогает свежий взгляд на задачу.
Реализация нескольких решений подряд также комфортабельна и эффективна для меня.
Ещё небольшая выгода - не давать информацию другим участникам.
Также выгодой я считаю, что весь проблем сет постоянно находится под контролем.