Я так понимаю, что во всех приличных регионах второй тур уже завершился (ну или как минимум должен был завершиться), тут все равно сейчас будет активное обсуждение задач — поэтому я думаю, что следующую историю уже можно запостить и здесь.
...Позавчера утром я сидел на открытии региональной олимпиады в Нижегородской области. Проводив участников решать задачи, я поехал домой. Поскольку с утра я наблюдал некоторые разногласия в вопросах проведения олимпиады между участниками и жюри, я решил все-таки раздобыть “Требования к проведению регионального этапа...” этого года, чтобы вечером, после тура, было что дать почитать жюри. (Сразу отмечу, что я не имею никакого отношения к проведению региональной олимпиады — ни как член местного жюри, ни как разработик задач.)
Чтобы скачать “Требования...”, я, естественно, полез на rosolymp.ru — именно там они были все прошлые годы. Сейчас там я требований не нашел, зато наткнулся на интересную новость. Заголовок новости гласил примерно следующее: “Вниманию жюри региональных этапов олимпиады по информатике!” (здесь и чуть ниже тексты цитирую по памяти, т.к. новость с сайта удалили).
К новости были приложены два файла. Первый назывался circles-check.zip и, конечно, меня сразу заинтересовал. Но второй был doc-файлом, и поэтому я начал изучение новости с него. Как и следовало ожидать, doc-файл был адресовам жюри региональных этапов, и его основная часть состояла из двух пунктов:
1. В условии задачи 2 необходимо заменить ограничение 100 000 на 10 000;
2. Проверяющая программа по задаче 7 содержит неточности; правильная проверяющая программа прилагается.
Ну ладно, первая новость хоть что-то и палит, но не очень много. Но вторая новость выглядит очень странно. Очевидно, что circles-check.zip и есть тот чекер, но если это так, и если он нетривиальный (ясно, что тривиальные чекеры типа ncmp заменять не потребовалось бы) — то ведь он может сильно спалить задачу. Качаю circles-check.zip, еще надеясь увидеть, что либо скачивание архива закрыто паролем, либо сам архив запаролен...
Но нет! Архив скачивается, распаковывается, и в нем и правда оказывается файл check.dpr (а также check.exe), который действительно является чекером к некоторой задаче... и менее чем за две минуты чтения 203 строчек кода я понимаю условие задачи. Кто видел этот код (или кто его увидит, когда его выставят в архиве), тот согласится, что пересечение множества серединных перпендикуляров не оставляет места сомнениям, тем более что все функции названы говорящими названиями, да и на десерт в коде есть, например, следующий фрагмент:
if not(equal(p, pp)) then begin
<...>
quit(_wa, format('Points: %d, %d, %d, %d are not on the same circle', [ind[1], ind[2], ind[3], i]));
Как выяснилось сегодня, мое понимание условия было полностью верным, с точностью до одной детали: сначала мне показалось, что нельзя одну и ту же точку кидать на обе окружности — но это фактически несущественно. (Вечером в субботу, когда я почитал чекер повнимательнее, я заметил этот свой баг.)
Все это я транслирую у себя на стене во вКонтакте (стараясь там не упоминать детали понятного мною условия), которую читают многие люди, занимающиеся региональной олимпиадой — как готовившие задачи, так и входящие в жюри разных регионов (а школьники, в основном, видимо, пишут тур). В итоге через пару часов новость с сайта удаляют, но ситуация остается крайне неприятной.
Новость на сайте датирована 17 января, т.е. этот архив лежал на сайте уже примерно двое суток. Ясно, что не только я его мог тут увидеть, и совершенно непонятно, не видел ли его кто-нибудь еще из участников, их учителей или вообще сочувствующих. Седьмая задача по смыслу далеко не самая простая, ее полное решение может сильно помочь в прохождении на РОИ — а потому такое палево может сильно помешать участникам, которые архива не видели.
Вообще, на мой личный взгляд, наиболее правильное решение для центрального жюри на тот момент было бы снять задачу с тура, но понятно, что за два выходных вряд ли получится проинформировать все регионы. Альтернативный вариант — не учитывать эту задачу при отборе на РОИ, не предупреждая об этом участников заранее, — тоже несколько сомнителен. Бурундук2 предлагает еще один разумный вариант — в срочном порядке выдать всем участникам региона этот чекер — но ясно, что он тоже нереализуем.
Но при этом я понимаю, что будет весьма плохо, если мои знакомые школьники не пройдут на РОИ просто потому, что их обойдет кто-нибудь еще, кто сам (или чей учитель) заметил этот чекер на сайте и рассказал задачу. Поэтому я даже думаю над тем, не рассказать ли задачу (вместе с квадратичным рандомизированным решением, которое я довольно быстро придумал) всем своим знакомым школьникам, чтобы они оказались как минимум в не более плохом положении, чем другие участники. Конечно, корректность этого варианта крайне неочевидна, но корректность варианта “я знал, что мои школьники могут оказаться в заведомо невыгодном положении, и ничего не сделал” мне тоже не очевидна. Но в итоге я решил отказаться от этой идеи, и даже удалил ссылку на конкретную новость со своей стены вКонтакта.
Ситуацию еще несколько упрощало то, что задача была довольно нетривиальной, да к тому же еще и геометрией (а мое квадратичное рандомизированное решение еще и весьма нетривиально в реализации). Не так уж и много в России людей, способных понять этот чекер, не так уж и много людей, способных написать такое решение (на тот момент я не знал совсем уж простых решений). Поэтому если бы чекер на сайте увидел средний участник региона, то вряд ли он ему помог бы.
Но тем не менее, на данный момент единственное, что было сделано, чтобы минимизировать эффект от спаленнной задачи — это соответствующий материал был довольно оперативно убран с сайта, где продежал два дня. Мне далеко не очевидно, что не было ничего другого, что можно было сделать. Кроме того, интересно будет посмотреть на статистику по этой задаче. Я рискну все-таки понадеяться, что центральный оргкомитет что-нибудь еще придумает, чтобы минимизировать несправедливость отбора на РОИ, вызванную спаленной задачей.
Кроме того, я надеюсь, что из произошедшего будут сделаны необходимые выводы, и что такая ситуация в будущем не повторится. (Тем более что правки в условия, по-моему, попадали на росолимпе в открытый доступ и раньше — хотя я тут могу и ошибаться, сейчас с ходу примера не нашел.)
...И еще, в качестве несколько офф-топика. Все-таки вызывает удивление, почему до сих пор в России тестирование решений регионального этапа не осуществляется централизованно. Казалось бы, никаких технических препятствий этому нет, но это сняло бы множество проблем. Не говоря уж о том, что не потребовалось бы распространять исправленный чекер, были бы также исключены и многие проблемы местного жюри. Я пока не будут писать про веселое тестирование решений первого тура в этом году в Нижегородской области, тем более что там история пока еще не закончилась — но если кто не знает, как проходят региональные олимпиады в регионах, то вот история двухлетней давности. С тех пор изменилось многое, но на качественном уровне — мало что. Централизованное тестирование половину проблем бы решило.