Как решать другие контесты и codeforces

12.01.2020

Алгопрог вам дает, в первую очередь, знания алгоритмов (ну и смежных тем). Но мало их знать, надо уметь их применять в реальной жизни, особенно если вы — школьник и хотите участвовать в олимпиадах. Если вы на начальных уровнях алгопрога (примерно до 3 уровня), то пока просто решайте алгопрог. Но добравшись до уровня 3 (или даже можно чуть раньше), начинайте более-менее регулярно тренироваться на задачах из реальной жизни — в первую очередь, конечно, решая раунды на codeforces, и прорешивая старые олимпиады.

Что решать?

А именно, во-первых, регулярно пишите раунды на cf. В идеале у вас на cf должен быть рейтинг, более-менее соответствующий вашему уровню на алгопроге. Примерно так:

Уровень на алгопроге Рейтинг на cf
3 1400
4 1500
6 1700
8 1900

Это, конечно, очень примерная табличка, но ориентируйтесь на нее: если ваш рейтинг на cf заметно ниже, чем должен быть по вашему уровню на алгопроге, значит, вам, наверное, пока не надо решать алгопрог, лучше активнее решайте cf.

Что значит решать cf? Там есть регулярные раунды, но также есть огромный архив старых раундов. Если вы хотите что-то порешать, а сейчас раунда нет — просто берете случайный старый раунд и решаете. (Собственно, примерно так мы и делаем на продвинутых задачах для старших уровней по воскресеньям.)

Помимо cf есть еще архивы старых олимпиад; когда готовитесь к очередной олимпиаде, найдите туры прошлых лет и прорешайте хотя бы пару туров в условиях, максимально приближенных к реальным.

Работа над ошибками

Но не менее важно после написанного тура (раунда на cf, что реального, что виртуального, подготовочного тура к олимпиаде, реальной олимпиады) провести «работу над ошибками» — разобраться, могли ли вы выступить лучше и как.

Для этого сначала прочитайте разбор — на cf почти к каждому раунду есть разбор, к другим олимпиадам тоже можно найти, если поискать, в крайнем случае найдите решения жюри или других участников. (Конечно, можно немного поразбирать ошибки сразу после контеста и без чтения разбора, особенно если вам немного не хватило времени дорешать задачу, но разбор все равно обязательно надо прочитать.) По каждой задаче, которую вы не решили полностью, подумайте: вообще, вы понимаете, как ее предлагалось решать? Хватает ли у вас теоретических знаний, знаете ли вы нужные алгоритмы?

Если не хватает, то ладно: значит вы действительно вряд ли могли решить эту задачу. Конечно, вы можете попробовать разобраться в соответствующем алгоритме, особенно если он выглядит не сложным, или если это не настоящий алгоритм, а скорее какая-то оптимизация. Но если вы еще только на 3-5 уровне алгопрога, то понятно, что многие алгоритмы вы пока еще не знаете, так что не надо про это слишком переживать.

А вот если по разбору вы поняли, что вы в принципе всё, что надо, знали — вот тогда тщательно подумайте, почему у вас все-таки не получилось решить эту задачу. Может быть, вы ее недотестировали, может быть, вы, думая над этой задачей, пошли куда-то не в ту сторону, или, например, напрасно пытались сдать жадность, когда там динамика. Или может быть вы слишком много времени потратили на другой задаче, и на эту просто не осталось времени… В общем, поймите, что во время контеста пошло не так, и что надо исправить, чтобы в следующий раз выступить лучше. И в любом случае напишите-таки решение и сдайте его.


Мой курс по алгоритмическому программированию (и подготовке к олимпиадам) для школьников, студентов и всех желающих — algoprog.ru