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

Автор natalia, 13 лет назад, По-русски
Три последних "общих" контеста: Codeforces Beta Round #58, Codeforces Beta Round #60 и Manthan 2011, выявили ряд моментов в правилах Codeforces-раундов и вообще принципах их подготовки, которые вызвали разгоряченные споры и недовольство некоторых участников. Самый наболевший вопрос - взломы и их оценивание, я затрагивать не буду. Он обсуждается, например, здесь

Хочу выдвинуть такие предложения.

1. После того, как решение участника прошло претесты, нужно открывать их для этого участника.

Какую роль вообще играют претесты? Согласно правилам, "тот факт, что решение прошло претесты говорит только о том, что оно вполне разумно". "Вполне разумно" - понятие расплывчатое, поэтому подбор претестов очень субъективен. Обобщая опыт участия в контестах, могу сказать только то, что в претестах обычно нет максимальных тестов. А вот крайние случаи могут быть представлены в большей или меньшей степени. Цель претестов - с одной стороны, не пустить взламывать тех, кто не может написать хоть какого-то разумного решения по задаче, с другой стороны, оставить некоторый простор для взломов.

Я считаю, что претесты все-таки должны охватывать значительную часть случаев и не пропускать совсем "паленые" решения, как вышло в этом случае. Но они все равно будут пропускать решения с серьезными багами. Даже если автор не хочет этого намеренно, он может не учесть в претестах какого-то распространенного заблуждения участников. Когда я собиралась готовить свой контест, я спросила у Артема Рахова, сколько всего претестов по задаче. Когда я узнала, что их 5-7 (включая примеры из условия!), это сильно изменило мою тактику на контестах: я стала более тщательно тестировать свои решения. Когда нужно гарантированно сдать задачу с первой попытки (например, на школьных олимпиадах), нужно тестировать хотя бы на 10-15 тестах. Причем скорее на 15, если задача сложнее a+b.

Вот и встает вопрос: если решение прошло претесты, нуждается ли оно в дополнительном тестировании? На какие случаи? Открытие претестов даст участнику возможность решить для себя этот вопрос сразу же по ходу соревнования и не обижаться ни на кого потом за слабые претесты. 

2. Выставлять баллы по задачам не обязательно 500-1000-1500-2000-2500, а в соответствии с их реальной сложностью.

Потому что бывает, что задачи A и B, или D и E примерно одинаковые по сложности. Тогда имеет смысл дать за них 750-750 или 2250-2250. Правда, эта идея немного близка к Топкодеру :)

3. При определении сложности задачи учитывать не только сложность алгоритма, но и количество частных случаев в ней.

Эту проблему особенно ярко показал последний контест (Manthan). Задачи D и E (особенно D) опирались на более или менее стандартные алгоритмы и их решение вызвало у многих участников меньше проблем, чем B и C. Тем более, когда идет активный "взломный" процесс, для "взламываемых" и исправляющих свои решения задача все дешевеет и дешевеет. В итоге задачу сдает маленькое количество людей и те, кто сдает, получают совсем небольшие баллы, хотя им пришлось преодолеть значительные трудности. За такие задачи, на мой взгляд, надо давать побольше баллов. Что касается порядка, то ничего страшного, если эти задачи будут A или B - это будет говорить о том, что они не требуют знания чего-то совсем сложного и доступны для начинающих участников. А большая стоимость задачи будет говорить о том, что задача, возможно, содержит подводные камни.
  • Проголосовать: нравится
  • +54
  • Проголосовать: не нравится

13 лет назад, # |
Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится
В порядке предложения...
Насколько я знаю, авторы иногда пишут неверные решения, дабы проверить полноту тестов. 
Так же можно написать несколько не "вполне разумных" решений и постараться чтобы они падали на претестах.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +26 Проголосовать: не нравится
    Такое иногда делается. Но авторы не всегда совершают те же баги. На некоторых олимпиадах (например, РОИ) есть большая группа авторов, кто подготавливает задачи. Codeforces - не тот случай. Здесь, подготовкой занимается два человека - автор и координатор задач.

    Замечу, что общественное мнение о ценности взломов установилось на основании двух последних недавних контестов. Замечу, что на первом из них (60-м раунде) Артем высказывал пожелание автору расширить набор претестов. Наталья не захотела пойти на это, предпочтя развитие событий по сценарию "много взломов". Здесь была принята точка зрения автора, учтя опыт и заслуженность Натальи с одной стороны и солидарного с ней Дмитрия Матова (не менее опытного и заслуженного участника) с другой. Хорошо получилось или плохо: сказать трудно, но баланс был в самом деле смещен, что понравилось, очевидно, не всем.

    В настоящее время Артем получил от меня инструкции по более жесткому контролю этого процесса, я думаю ситуация изменится.

    Что касается Manthan 2011, то команда Codeforces принимала ограниченное участие в подготовке этого контеста - все вопросы к авторам. Так как Артем был в отъезде (да-да, ездил в Facebook), то наши скромные возможности были еще больше ограничены. Хотя именно жесткий контроль с моей стороны позволил избежать ужасных условий, капитальных багов в одной из задач, да и две задачи из пяти оказались моего авторства как замена совсем неудачным индусским.

    Я внимательно слежу за дискуссией вокруг хаков и прочего contestplay: думаю, некоторую модернизацию имеет смысл ждать. Капитальных изменений пока я не планирую.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Думаю, вполне достаточно будет написать такое для задач А(ведь именно они  —  причина многих споров) и, возможно, для В. 
      Разумеется, это всё исключительно по желанию авторов.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

2. Я тоже так считаю, правда немного с другой стороны.
Может нужно чтобы сложные задачи от простых отличались более существенно или даже от суммы простых, ведь за первые две можно получить примерно тоже что и за одну 4, но ее не все могут решить, а первые две почти все если внимательно.
Получается за простые задачи в сумме можно получить больше чем за одну сложную. На топкодере нет такого, и тот кто решит одну за 1000 может расчитывать что его не обойдут те кто ее не может решить. Там очки в геометрич-й прогрессии идут с коэф-м 2, если бы могли так же сделать. Но чем больше задач одновременно, тем сложнее такие задачи составить. Поэтому с 3 задачами намного проще чем с 5.

3. Я вообще не хотел бы видеть задачи легкие по сложности, но большие по коду. Типа на форматирование текста. Интереса кодить такую задачу - никакого по моему. К тому же в обилии кода больше шансов допустить ошибку, и в итоге весь труд - за зря.

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    1. То есть взломы только на макстесте по лимиту времени?
    И кстати видел как неопытные участники писали решение за куб для N=10^6, после чего их конечно взламывали
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    > Может нужно чтобы сложные задачи от простых отличались более существенно или даже от суммы простых.

    Полностью поддерживаю. Это поможет уравновесить ситуацию, когда, например, очень много взломов по задаче A. Тогда участники, которые в состоянии решить D и E, возможно, возьмутся их решать. Тем, кто не может, ничего другого не остается, как ломать по A. Но им уже труднее будет соревноваться с теми, кто решает D-E.

    Хотя это зависит от конкретных задач. На мой взгляд, в Manthan, например, вообще не было очень сложных задач, за которые можно было давать гораздо больше баллов. 
  • 13 лет назад, # ^ |
      Проголосовать: нравится +28 Проголосовать: не нравится
    "...Претесты, я думаю, должны по возможности тестировать все крайние случаи..."
    Так что за взломы тогда будут - открыл решение, посмотрел ограничения, проверил нормально ли все с типами, глянул сложность и всё? Если логика уже проверена зачем вчитываться в решение, понимать идею.

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

Я же написал "по возможности".
Глубоко не вдумываясь кажется что это почти не возможно.

Основной "игровой процесс") все-таки решение задач, а взломы - дополнительный. Считаю, приемлемо улучшать процесс решения задач (решение+тестирование), в ущерб взломам.

13 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
Возможно я не прав, но думаю что "взломы" это лотерея, то есть если в комнате будут все кто допускают ошибки, то баллы есть, иначе их нет. Складывается странная ситуация, когда человек решивший на 1 или 2 задачи меньше находится выше в рейтинге. Возможно взломы уместно учитывать у тех участников, чьё кол-во решённых задач одинаково. Таким образом повысится ценность сданной задачи. Если же у тебя задач решено больше, то пусть хоть 100 взломов у соперников, ты всё равно будешь выше.
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
    А как же тогда быть с ситуациями, когда какой нибудь участник решил меньше задач чем я, но из-за того что у него упала допустим первая, и очков у него чисто по времени гораздо больше чем у меня. По вашей логике он должен идти за мной, даже если я получил все свои AC на последних минутах? Oo
    • 13 лет назад, # ^ |
        Проголосовать: нравится -23 Проголосовать: не нравится
      Да. Потому что Вы сдали больше чем он. Здесь главное решить больше задач, за отведённое время. За 2 часа Вы сделали больше. Вы победили. Всё логично. 
      • 13 лет назад, # ^ |
          Проголосовать: нравится +11 Проголосовать: не нравится
        Это называется полностью поменять формат соревнований, не думаю, что здесь много сторонников этого.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +33 Проголосовать: не нравится
        Не логично. Это не ACM формат. Тут кто набрал больше баллов победил. А не кто решил больше задач, так как баллы можно получать разными способами. 
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
     
    "Возможно я не прав, но думаю что "взломы" это лотерея, то есть если в комнате будут все кто допускают ошибки, то баллы есть, иначе их нет." - еще один аргумент о нехорошести черезмерных взломов.


    "Возможно взломы уместно учитывать у тех участников, чьё кол-во решённых задач одинаково. Таким образом повысится ценность сданной задачи. Если же у тебя задач решено больше, то пусть хоть 100 взломов у соперников, ты всё равно будешь выше" - наверно слишком сложная система, к тому же зависимости не только от кол-ва, но и от качества должны быть.
13 лет назад, # |
  Проголосовать: нравится -11 Проголосовать: не нравится
Можно по анналогии с ACM разделить очки и штрафные баллы.
Но сделать задачи взвешенными.
У Google так, по моему неплохо.
А взломы соответственно будут влиять на штрафные очки.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Я полностью согласен по первому пункту. Претесты не открываются изначально только потому, что иначе читер может легко заблокировать задачу из под левого аккаунта и почитать чужие решения. Так эта проблема будет решена
  • 13 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    С небольшим добавлением - я бы предложил давать возможность участнику протестить на претестах (но не на взломах) без полноценного сабмита (и штрафных баллов) и запретить полноценный сабмит до того, как пройден этот тестовый. Так можно посмотреть на претесты и потестить у себя еще если они слишком слабые и при этом не схлопотать штрафа
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      схема становится похожа на топкодер)). кстати, а там можно отправлять если не прошли сэмплтесты?
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Да, можно. На моей памяти был случай, когда на последней минутах красным была сдана 1к, которая падала на каком-то сэмпле (о чем он написал уже после челлендж фазы).
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Или можно просто давать большое количество самплов как на TC.
13 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится
Я не понимаю жалоб на слабые претесты. Они же на то и претесты, чтобы быть слабыми. Да, разные авторы - разная сила претестов. Надо просто это помнить и тестировать ваши задачи так, как вы считаете нужным. А просить автора дать сильные претесты, это почти тоже самое, что просить автора написать вам подсказку к решению.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится
    Сильные претесты - лишь способ решить основную проблему. А основная проблема - челленж задачи A стоит, как задача E. Таких способов уже много предложено, часть лучше, часть - хуже.
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А почему челлендж задачи а должен стоить меньше чем челлендж Е? В Е, казалось бы, намного легче набажить: неверно оценить ассимптотику, не до конца продумать алгоритм и т.д. и т.п.
      • 13 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится
        по-моему, сложность составления завального теста и сложность задачи далеко не всегда друг от друга зависят.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Абсолютно согласен. И именно поэтому было бы глупо ставить разные баллы за челленжи разных задач.
      • 13 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        Вы уже в который раз неправильно читаете мое сообщение. Челленж по задаче A позволяет набрать столько же баллов, что и решение задачи E.
        • 13 лет назад, # ^ |
          Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится
          Сколько контестов, на которых случалось такое, было проведено? На моей памяти только раунд от Натальи Бондаренко, ну и Manthan. Один-два раз в год вполне позволительно такое "веселье"
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Полностью согласен, только вот я за то, что администрации надо будет следить, чтобы такое веселье всё-таки не выпало ни на один из раундов Codeforces Open.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Ну тогда я писал исходя из того, что такие контесты зачастили. Я опасался, что это веселье войдет в моду.
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
2) Полностью согласен с идеей гибкого соотношения стоимости задач. 
Если задачи примерно одинаковые по сложности и/или количеству граничных случаев, то и стоить они должны примерно одинаково и отличаться никак не на 20-50%.
1) Проблема необходимой сложности претестов носит глубокий философский характер. 
С одной стороны, сильные претесты могут быть равносильны подсказке.
С другой стороны, иногда на сложных задачах, "пустые" претесты, пропускают заведомо неверное решение из 20-30 строк, реализуемое за 10 минут. У меня так два раза было с задачей D. Подобное обстоятельство может помочь грязному читеру из под левого аккаунта подсмотреть решение сложной задачи. Это также может помочь более честному участнику начать легко зарабатывать на взломах по этой задаче.
Поэтому, считаю, что сильные претесты более подходят для CF, и особенно важны для задач выше B.
13 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится
Есть небольшое предложение по поводу организации процесса взломов. 

Во время раунда участники часто досдают задачи, меняют свои решения, меняются их позиции в таблице комнаты, вобщем хаос, и отслеживать то чьи решения ты уже просмотрел, а чьи еще нет очень сложно(неудобно) - приходится или записывать, или пробовать запоминать. 

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

Поэтому предлагаю заменить инфомрацию о количестве очков за ту или иную задачу участника (в таблице комнаты) на более полезную информацию. Например можно выделять разными цветами те решения которые ты уже просмотрел, которые после просмотра были пересданы, те которые еще не смотрел. Или делать текстовые пометки "Viewed", "ReSubmitted", "UnViewed", "Hacked" (кем либо). Можно так же добавить информацию о моменте сдачи, и например попытке. Еще что-то нужное
  • 13 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится
    Абсолютно не согласен. Если для Вас эта информация является бесполезной, то с чего Вы взяли, что для остальных она тоже бесполезна? Я, например, иногда выбираю, какую задачу открыть следующей, посмотрев в таблицу на время и чистоту сдачи участников. Иногда я смотрю как сдают ту или иную задачу люди из моего списка друзей или из топа. Более того, я, например, никогда не взламываю решения - мне нравится программировать и решать задачи, а не рыться в чужих ошибках. Так зачем мне нужны эти "Viewed", "UnViewed" и прочее?
    И вообще, меня удивляет фраза от участника "вне рейтинга" о том, что же неудобно во время соревнований. Стало быть у кого-то два аккаунта?!
13 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Такой вопрос. (Думаю, это самый подходящий для него топик.) Могу ли я как-нибудь узнать претесты хотя бы после раунда?

Опишу, зачем мне это вдруг понадобилось. В 79-м раунде по задаче D у меня было два разных недоказанных варианта решения. Я выбрал наудачу один, как потом выяснилось, правильный. Я понадеялся на то, что если выберу неправильный, то он свалится на претестах и я перепишу по-другому. Вот сейчас я ради интереса таки отправил неверное решение - WA, as expected. Но мне всё-таки хотелось бы знать, был ли случай, на котором неверное решение падает, уже в претестах, то есть потерял бы я в случае неверного угадывания целую задачу или нет.
  • 13 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    В этой задаче 9 претестов.

    Вообще, интересный вопрос, да. Было бы хорошо сделать опцию "запустить решение на претестах" во время дорешивания..