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

Автор IcantComeUpWithOrigName, история, 5 лет назад, По-русски

Насколько распространена ситуация при которой несмотря на то что ты сдал решение одновременно или раньше, твой соперник выше тебя на рейтинге, за счет того что его код работает быстрее или/и требует меньше памяти.(При условии что оба кода проходя все тесты) На каких платформах и турнирах такая ситуация и насколько она вероятна? Имеет ли вообще хоть какой то смысл оптимизировать решение если асимптотика решения остается неизменной?

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

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

»
5 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем IcantComeUpWithOrigName (предыдущая версия, новая версия, сравнить).

»
5 лет назад, # |
Rev. 2   Проголосовать: нравится +38 Проголосовать: не нравится
  1. Такого не бывает.
  2. Крайне редко (если такая фича есть, то она будет естественно упомянута в правилах контеста).
  3. Имеет смысл, если очень большая константа и поэтому по TL не заходит. Также имеет смысл, если код проходит претесты почти впритык к TL (например, 900 мс при TL = 1 с). В других случаях особого смысла нет.
  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Спасибо за ответ. А часто такое бывает: "код проходит претесты почти впритык к TL". Лично я такого не видел, но с другой стороны я и задач не так много решил.

    • »
      »
      »
      5 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      Как правило, в претестах на Codeforces включают тесты с максимальными входными данными, чтобы +- точно проверить, проходит ли решение участника TL. Но если вы отправляете решение, и максимальное время выполнения на претестах близко к TL, это значит, что существует вероятность, что системные тесты оно не пройдет.

      Причины две. Во-первых, в систестах может попасться тест, на котором программа работает чуть-чуть медленнее, и вы получите TL. Кроме того, система измеряет время выполнения программы с некоторой погрешностью (до 10, редко 15%) — и одно и то же решение, близкое к TL, может сначала пройти тест, а при втором запуске — нет (чистый рандом).

»
5 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

As long as both solutions pass all the test cases, efficiency does not matter in competitive programming. The one who submitted earlier doing fewer mistakes will get the better rank.

»
5 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

In general, you want your code to be as easy to code as possible so that it is only as efficient as it needs to be. Don't bother trying to make something linear if it would require a bunch of thinking and you can just mindlessly binary search for the answer anyway.

That said, when it gets to harder problems, occasionally you will either need to optimize your solution to lower the constant factor (which is always annoying), or do some nonsense to get rid of log factors, such as using an RMQ to answer queries in O(1) instead of a segment tree in O(log(n)).

In practice, the latter usually happens when your logic is already built on top of some other log factor, for instance you are doing something for each power of 2, or you are binary searching something, et cetera.

  • »
    »
    5 лет назад, # ^ |
      Проголосовать: нравится +54 Проголосовать: не нравится

    That was the smoothest segue into self-promotion I've ever seen xD. +1

    (On a more serious note that video is very educational and helped me understand RMQ) :D

»
5 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Execution time and memory don't matter on Codeforces as long as they're below the limits. It's the same for all other contests that I know of.

»
5 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

In (Uva) currently named onlinejudge.org, there is a rank list based on the efficiency for each problem.