После начала учебы начал замечать, что уровень решения задач по сравнению с летом начал стремительно падать. С недавнего времени начал наблюдать это в контестах.
Недавний Educational Contest и CF824 наглядно показали мне, что из-за неучитывания небольших нюансов, я знатно улетел в минус. Сшка Educational Contest’а - банальная комба, которую свернул в дп. Казалось все идет как надо, однако отрицательный ответ наносит ОТВЕТный удар. В итоге не хватило лишь if’а, который прибавлял MOD, если ответ отрицательный.
Или CF824. Опять Сшка. После прочтения задачи сразу в голову лез DFS, однако из-за неправильного счета асимптотики(n^2 * 26 перепутал с n * 26^2) ушел в другую степь(СНМ), которая была верна, однако за 10 минут попросту не успел отдебажить ее)
Стараюсь решать сложные задачи, однако их решаю медленно и трачу кучу попыток, словно на IOI-style контесте. Хотел спросить у опытных информатов как с этим бороться? Решать еще больше задач или стоит уделить внимание на что-то менее очевидное?
Если кол-во времени, которое вы уделяете тренировкам не изменилось, то это просто следствие того, что у вас голова еще забита другой информацией, поэтому и меньше фокуса => больше ошибок по невнимательности.
Че с этим делать? Себе записывать каждую такую мелочь: не забывай проверить ифы, не забывай проверять экстремальные или специальные случаи. И читать список перед контестом.
Для того чтобы научиться быстрее находить тупые ошибки советую начать реже смотреть на тесты. Если каждый раз после ошибки смотреть на тест и дебажить то в итоге будет сложнее находить ошибки на олимпах.
Ещё советую научиться стресс тестированию, это очень мощный инструмент в случае когда уже долго не можешь натйи баг/нужно найти баг быстро. Вот гайд Stress Testing | Ali Ibrahim Site .
Ну а ещё используй черновик, для меня черновик стал очень важной частью процесса мышления над задачей, он выполняет большое количество задач. Например при придумывании идеи я сразу рассматриваю случаи на черновике, расчитываю время работы. Когда пишешь допускаешь ошибки реже чем в голове.
Про модуль:
У меня с этим небольшая шиза, каждый раз когда я получаю WA я иду проверять правильно ли у меня все с модулем, а при написании кода я ставлю очень много скобок для того чтобы точно не допускать ошибок. Также для того чтобы не допускать ошибок с модулем люди часто пишут функции add(a, b), mul(a, b) и т.д. которые возвращают сумму/произведение/… по модулю. Это помогает избавиться от ошибок. (Кстати с бинарными операциями тоже следует быть аккуратней, у них там странные приоритеты)
На IOI-style нужно быть довольно быстрым чтобы успетб закодить все что придумал
Говоря про IOI-style, я имел ввиду, что я решал так, словно прорешиваю iOI контест, где исправив минимальные баги, сразу закидываю решение на тестирование.
Че с этим делать? Себе записывать каждую такую мелочь: не забывай проверить ифы, не забывай проверять экстремальные или специальные случаи. И читать список перед контестом.
Подразумевается то, что после долгого использования этого листа, я смогу “зазубрить” это и помнить об этом без специальных “указаний”?
Для того чтобы научиться быстрее находить тупые ошибки советую начать реже смотреть на тесты. Если каждый раз после ошибки смотреть на тест и дебажить то в итоге будет сложнее находить ошибки на олимпах.
Это касается решения во время контестов или во время обычного решения задач?
P.S. Система начала жаловаться на то, что я всем отвечаю более одним сообщением
Подразумевается, что сначала вы заставляете себя делать это осознанно, а потом будете делать те же самые проверки мысленно даже не задумываясь об этом.
Если вы выделите текст любого сообщения, появится кнопка ответить с цитированием. Так вы можете отвечать нескольким пользователям в одном сообщении.