Блог пользователя HCCoder

Автор HCCoder, 13 месяцев назад, По-русски

Привет, Codeforces!

Уже было много статей, связанных со скоростью реализации, но у меня проблема немного другая (хотя со скоростью тоже есть проблемы). Я часто допускаю элементарные ошибки в коде.

До того как я увлёкся олимпиадным программированием, я занимался созданием мобильных игр и приложений. Написал тысячи строк кода и считал реализацию своей сильной стороной. Но практика в соревнованиях показывает обратное — я сливаю рейтинг только из-за багов в коде.

Например, на недавнем Codeforces Round 1022 (Div. 2) я потратил 40 минут на вторую задачу, затем переключился на третью. Идея пришла практически сразу после прочтения условия, но я решил её только после пяти неверных посылок и большого количества потраченного времени. В итоге получил всего около 600 очков из 1500. Во всех посылках логика была почти та же, просто реализация оказывалась с ошибками.

Это не первый случай, когда я сливаю рейтинг из-за кривых рук.

Что вы посоветуете? Как практиковать аккуратное написание кода? Есть ли ресурсы с задачами, где основная сложность именно в реализации?

  • Проголосовать: нравится
  • +17
  • Проголосовать: не нравится

»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been translated by HCCoder (original revision, translated revision, compare)

»
13 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

I struggle with the same issue, the advice I was given was to try and solve more CSES problems and try to "speedrun" them. Another suggestion, if you encounter an issue like this during contest, is to try to create random test cases to try to find edge cases in your code; using a tool like CPH judge makes this much easier.

»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится +4 Проголосовать: не нравится

Для начала можно просто сидеть и вдумчиво писать код при решении задач, не допуская сложных конструкций, в работе которых ты не уверен. Поначалу эту может занимать заметно больше времени, но это лучше, чем потом тратить его на debug. Ну и перечитывать весь код перед отправкой тоже неплохо.

»
13 месяцев назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

same shit, after many times making the same mistake, i try to prove my code or give some kind of counter-tests

hope that i helped you:)

»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I'm curious. So you mean you have an easier time debugging actual software than CP code? Why is that? Is it because software code is usually more straightforward than CP code?

»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится +1 Проголосовать: не нравится

speedrunning already solved problems can help reinforce clean bug free implementation.Also try solving implementation tagged problems on Codeforces to build muscle memory and precision.Overtime this will reduce careless mistakes in contests.

»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Implementation in CP can't really be taught, you just acquire it as you go. Some tips that I can probably give you is:

  1. Do problems with the implementation tags, or solved problems that you remembered that you struggled with implementation. Problems from Codeforces are usually not very implementation-based, so you may have to seek another source (ICPC, OI contests, etc)
  2. Try to find a coding pattern that works for you.
  3. Write a stress tester, it's a 10 minutes investment, so a good investment if you think you will be staying at that problem a bit longer.
  4. Try thinking a bit more before touching your keyboard. Is your idea of the solution clear, or is it still fuzzy?
»
13 месяцев назад, скрыть # |
 
Проголосовать: нравится +6 Проголосовать: не нравится

Могу дать свой мини совет, хоть он и достаточно наивный. Часто когда в голову приходит решение задачи, я рвусь сразу по быстрее писать код, допускаю кучу ошибок и всё... ггвп. Так что мой совет в том что перед тем как идти писать код, представь в голове наброски самых сложных частей кода и подумай как можно их сделать короче или вообще по другому реализовать их, чаще всего на это требуется пару десятков секунд, но проблем с реализацией будет сильно меньше)