Добрый день.
Сначала я хотел написать комментарий. Его стал писать принимая пересдачу у студентов, увлекся и текст вырос до размера поста.
Контест такой: Михаил droptable Рубинчик как-то написал пост про архивы, где он поставил под сомнение целесообразность использования архива задач Codeforces как архива задач в отличии от Тимуса. Еще в комментариях вот к этому посту была тема поднята. Сам я трепетно отношусь к Тимусу, мой старт в олимпиадах был во многом связан с решением задач оттуда (правда больше контестов, чем архива), но такая позиция мне не очевидна.
Вероятно, Михаил недостаточно внимательно посмотрел на возможности Codeforces. Возможно, что ему удобно рекомендовать Тимус для своих студентов, так как многие задачи оттуда он помнит, лично знает авторов, у него уже десяток студентов, нарешавших там около 1000, может имеет какой-нибудь админский доступ туда или хотя бы прямой выход на админов. Если так, то я его в этом отлично понимаю, сам по этой причине часто рекомендую к прорешке хорошо знакомые мне ресурсы.
В списке ниже я попробую раскрыть тему, какие усилия приложила команда Codeforces, авторы задач и сообщество, чтобы ценность Codeforces как архива была значительная, буду сравнивать с Тимусом (не я поднял эту тему!). Если я отстал от того, что умеет Тимус, пожалуйста, поправляйте меня.
- На Codeforces задачи покрыты тегами. Часто бывает, что прорабатываешь какую-то тему и хочется решать тематические подборки задачи. На Тимусе я вижу какое-то непонятное упоминание
Метки: нет (скрыть метки для нерешенных задач)
. Что это для меня загадка. UPD: я нашел что это, но видимо метками покрыта лишь часть задач. - На Codeforces все задачи специально разработаны для раундов, а вот на Тимусе есть задачи с хороших командных контестов, которые потом неплохо бы потом прорешать командой.
- На Codeforces значительно шире круг авторов, на Тимусе очень много задач уральских авторов. Это накладывает отпечаток на тематику и типаж задач.
- На Codeforces наверняка в среднем лучше тесты просто благодаря наличию взломов. Я каждый контест убеждаюсь, что как бы ни старался автор обязательно найдутся какие-то взломы, которые улучшают набор тестов.
- На Codeforces практически к каждой задаче можно найти разбор и почитать её обсуждение в комментариях. На Тимусе есть форум, но я случайно потыкал в задачи — кажется, дельных обсуждений там меньше и читать его сложно.
- На Codeforces полезно после решения задачи посмотреть решения крутых участников и чему-то научиться (подсмотреть трюк в реализации, другую идею). На Тимусе такой возможности нет.
- На Codeforces каждая задача принадлежит недлинному контесту и при желании сначала можно решить виртуальное соревнование, которое её содержит, а потом только перейти к дорешиванию. Что полезно: не важно решали вы эту задачу в архиве, мэшапе, виртуальном контесте или настоящем — она будет помечена у вас как решенная.
- Codeforces значительно лучше подходит для совместной работы. Наличие списков пользователей позволяет быстро и просто для группы тренирующихся находить ранее нерешенные задачи. Если вы решали какой-то контест командой, то задача у вас будет отмечена как решенная.
- Наличие большого количества задач — это конечно плюс. Довольно странно ставить в заслугу "Зато на Тимусе задач меньше!". Если слишком разбегаются глаза, то можно решать только задачи из старых контестов (с номерами до 200, например). С другой стороны, если вы выбираете задачи какой-то определенной сложности или тематики, то выбор остается не слишком узкий.
Есть еще несколько моментов совсем уж на грани просто моего ИМХО — условия из простыней текста в некоторых задачах, условия только на английском, много задач с одним тестом и без пояснений.
В общем, тезис из поста Михаила мне не кажется каким-то значительным, а вот многие пункты перечисленные выше как минимум могут быть полезны.
С радостью послушаю мнение любителей архивов, где я ошибаюсь или что можно улучшить в этом направлении на Codeforces (сам я, конечно, вижу ряд пунктов).
Маленький архив задач хорош тем, что лично помнишь все задачи (по крайней мере, процентов 80 из решенных). Например, мне понадобилась не совсем банальная задача на теорию вероятностей + динамику — я пошел на тимус и уже знаю, что искать: фейерверк / альтернативное решение / шоушилин. Еще есть предположение, что 4 цифры запомнить легче, чем 3 цифры и букву.
На CF задач слишком много. Я почти не помню задачи на CF. Помню только штук 5 самых классных (ну и еще со своих раундов). А еще теги на CF расставляют как ни попадя. Вот, пожалуйста, типичная задача на теорию вероятностей: 9A - Бросок кубика. А вот на строки: 41A - Перевод. Чтобы найти хорошую задачу, приходится фильтровать по тегу, заходить в каждую задачу, читать ее, смотреть свое решение или решения топов. И это еще хорошо, что я когда-то активно решал CF, и поэтому я смотрю только зелененькие задачи. Если так не делать, очень часто будет попадаться какой-нибудь треш.
P.S. Насчет уральских авторов — создайте отдельный пост про особенности задач из разных регионов, многие твердят про это, но лично я никаких выделяющихся особенностей так не заметил, кроме обилия матана в Азии.
Codeforces на самом деле очень умная платформа, вероятно, самый продуманный в мире сайт в области подготовки к соревнованиям по СП. Есть много удобств как для тех, кто решает сам, так и для тех, кто тренирует других. Что касается архива задач, то он постоянно растет(что объясняется популярностью платформы), задач все больше и их разнообразие все шире.
Тут возникает маленькая проблема — бывает, проблемсеттер долго размышлял, поймал вдохновение и сочинил действительно оригинальную и крутую задачку, которую приятно думать. Такие задачи в архиве порой встречаешь, а в тренировках встречаешь чуть чаще, но тоже порой. Бывает, терются среди общей массы тоже хороших, но чуть менее, задач. Было бы супер, если бы на КФ была возможность для обычных участников такие задачи как-то выделить, отметить, плюсануть и так далее. И авторы бы увидели, что их работу ценят, и участникам\тренерам так было бы удобнее подбирать сеты для прорешивания.
Эту идею можно по-разному развивать, например, придумать, чтобы эти "плюсы" для задач были ограничены(скажем, каждый может пару задач в месяц лайкнуть), или подумать над объективностью и разрешить цветным более весомые плюсы ставить, или еще что-то. Сильно над этим не думал, как и о том, есть ли тут какие-то негативные последствия, но предложение на всякий случай озвучу :)
Я чуть ниже написал про "плюсануть". Есть еще с этим проблема, что часто плюсы отражают не пойми что. Например, удачная шутка соберет плюсов больше дельного контента. Такое будет происходить и с задачами, сместится акцент. Да и вообще задача такая хитрая штука, что измерять ее качество, полезность, интересность одним числом идея так себе.
Разумный механизм для массированного проставления плюсов уже существующим задачам придумать сложно — новые задачи, конечно, будут наплюсованнее и будут конкурировать в основном между собой. Единственный вариант — начинать новую страницу в жизни codeforces, так сказать :)
Нужно ли? Тут главное ответить на вопрос, что лучше для решателя архива: набор из нескольких тысяч почти никак не помеченных задач (ориентироваться он может только по кол-ву решивших и тегам-спойлерам), или набор из нескольких тысяч пролайканных (не всегда на 100% объективно) задач. Можно, кстати, так и назвать показатель: "качество задачи по мнению сообщества(может не совпадать с действительностью)". Еще можно, действительно, несколькими числами измерять: "полезность", "нестандартность", "порекомендовали ли бы вы задачу другим" и так далее.
Как вычислять сам рейтинг, чтобы не получилось, что у простых задач он выше только потому, что над ними больше людей подумало — этот момент тоже, я думаю, можно продумать. Пару направлений, в которые можно податься, внизу видел, вероятно, существуют и другие способы.
Такие мысли )
А это, кстати, неплохая идея для фичи: пофильтровать список задач в архиве по каким-то параметрам.
Мне в codeforces, как Архиве, не хватает:
Тупых баянов. На определённом этапе жизненно необходимы баянистые задачи без завуалированного условия (что-то в духе "Тренировок СПБГУ"), но только не в тренировочном интерфейсе, который не позволяет вычленить отдельную задачу в мэшап (давать бедным новичкам тренировку из 15 задач, чтобы они решили оттуда 2-3, мне кажется плохой идеей). Стандартные раунды, из которых состоит архив, априори пытаются быть небаянистыми, а образовательные раунды к сожалению не являются тематическими. Приходится решать проблему выгрузкой старья из родного contester.tsure.ru в полигон, а в худшем случае даже подготовкой новых задач — иногда это легче, чем найти нужную задачу среди историй про Ёжика Васю в Грумтландии.
Сложных задач на реализацию в духе ACM-контестов. Так уж сложилось, что большинство студентов и тренеров ставят целью в первую очередь успех в ACM, а не рейтинг на codeforces, а специфика задач там отличается, хотя бы в силу длительности контеста.
acm.sgu.ru — безумно жаль, что этот прекрасный архив канул в лету. В бытность участником решал там множество интересных задач, замену которым для своих студентов найти мне не удаётся до сих пор. Если это возможно, хотелось бы увидеть эти 500 с лишним задач в Архиве.
Решение очень простое: слить все задачи из тренировок, загруженных в codeforces в единый архив: со временем они обрастут тегами и это будет легко перевариваемый массив информации. Альтернативный вариант — позволить добавлять в мэшап отдельные задачи из тренировок (может я тупой, но не знаю, как это делать).
Спасибо.
Есть такое, согласен. На это есть большие планы.
У нас есть замечательный раздел Тренировки с сотнями хороших контестов. Решай — не хочу.
Я займусь его возрождением, обещаю. Это не очень просто.
Спасибо за такой обнадеживающий ответ. По п.2 проблема аналогична п.1: задачи ACM-style в системе есть в огромном количестве, но решать их в режиме архива неудобно, а в режиме мэшапа — невозможно. Это очень сильно ограничивает возможности тренера — постоянно сталкиваюсь с этой проблемой в рамках программы Botan-investment. Мне, например, нравятся 2-3 задачи с какого-то полуфинала, а весь остальной контест — бесполезная трата времени для моих студентов. Какой выход? Либо давать им два контеста на одной тренировке без единого монитора (пропадает соревновательный эффект), либо заведомо обрекать на безнадегу в виде излишне сложного контеста (не слишком повышает моральный дух у новичков).
Немного не по теме, но все-таки можно убрать из рейтинга по количеству решенных задач из архива ботов? Визуально не очень красиво смотрится, да и некоторые бывают ставят цели достичь топ 1 по решенным задачам, но при данном раскладе это достаточно сложно.
Можно сделать рейтинг задач по качеству — добавить "лайк/дислайк" кнопку к каждой из задач.
Участники любят, когда задача проходит и расстраиваются, когда нет. Короче, у простых задач будет значительно больше лайков и вообще эта метрика будет отражать не пойми что. Если что-то такое и вводить, то система должна быть сложнее чем просто лайк.
Кроме того, понятно же что лайкать в основном будут сразу после контеста, поэтому 3500 задач уже прошедших контестов останутся обиженными.
Это должны быть классы!
Сразу возникает 2 идеи:
Возможно, имеет смысл некоторая их комбинация.
Вряд ли такое будет работать. Комментарии они для всех, а удачной задача может быть только для Д2, и то, например, не всех.
Как пример — рейтинг поста за контест. Вот далеко не всегда он отражает интересность задач, качество работы автора и так далее.
Мне кажется, для задач работал бы рейтинг как на imdb.com для фильмов (или, скажем, labirint.ru для книг) — просто число от 1 до 10. С правом голоса только у тех, кто сдал. И с отдельными необязательными оценками сложности, оригинальности, юмора и так далее (как на лабиринте отдельные рейтинги для качества печати и качества иллюстраций). Общий рейтинг, правда, не понятно зачем нужен (нуу, его можно было бы использовать, чтобы понимать, какие задачи сообществу в целом нравятся, а какие в целом нет). А вот фильтр по сложности лично мне бы очень пригодился. И в топ-сколько-нибудь задач по всем остальным рейтингам я бы тоже с удовольствием заглянула.
Для контестов, кстати, тоже, наверно, так было бы объективнее, чем лайки считать, — если зачем-то вообще хочется их оценивать.
Вообще, это пока абстрактные спекуляции "а что если...". На самом деле не понятно, как это будет работать в реальном мире. Сейчас есть гипотеза, что простые задачи будут в топе — можно это гипотезу проверить. Даже если гипотеза подтвердится, в реальной жизни будут какие-то цифры над которыми можно думать, как-то ими манипулировать (или тупо убрать рейтинг :) ). В общем, будет что-то вроде A/B теста в google/yandex =)
Ещё у меня давно была мысль, что можно связывать задачи как на Кинопоиске. А именно, пользователи могут указывать сиквелы/приквелы к фильмам и похожие фильмы. Под описанием фильмов они пишут Если вам понравился этот фильм, не пропустите . Также можно для каждой задачи создавать 2 типа связей:
1. Задачи, которые являются подзадачами или упрощениями текущей задачи.
2. Задачи, которые являются усложнениями или используют идеи из текущей задачи в качестве шагов.
Все эти связи могут делать люди. Если с какой-то задачей свяжут слишком много задач, то можно отобрать топ-10 связей. Сила связи между задачами увеличивается по мере того, как всё больше людей указывает на связь между какими-то двумя задачами.
Я, конечно, осознаю, что на все хотелки может не хватить ресурсов, но так как мысль у меня витала давно, то решил поделиться =)
Хочу высказаться в защиту архива, благодаря которому я втянулся в СП.
Фичи, которые мне нравятся в других архивах, и которые хотелось бы увидеть на CF.
Возможность полностью скачать тесты к задаче?
Весьма спорный пункт: маленькие тесты (при очень большом желании) можно посмотреть на codeforces, а тест размером в десятки мегабайт не даст вам ровным счетом ничего.
Не согласен: часто имея тест, можно достаточно быстро локализовать проблему, используя дебаговый вывод.
Отличная и полезная идея.
да, бывает, что ОЧЕНЬ хочется скачать тест, а нельзя((
Мнение еще одного "любителя архивов"
Как представляется, чтобы говорить, какой ресурс "больше подходит", стоит сначала сформулировать задачи, которые при его использовании ставятся.
Пожалуй, проще всего мне говорить с точки зрения тренера, работающего с начинающими участниками и участниками среднего уровня.
Также сразу оговорюсь, что под архивом Codeforces подразумеваю то, что находится в разделе "Архив" — т.е. задачи раундов.
У того контента, что есть в тренировках, есть несколько проблем — во-первых, тренировки зачастую "едины и неделимы", вытащить задачу из pdf со всеми задачами, скажем так, непросто. Во-вторых, никаких метрик / тегов там нет (да и проблематично их там поддерживать).
Идея — прекрасная. Но, если смотреть с точки зрения тренера, доверять(ся) меткам нельзя. Да, на тимусе можно нередко увидеть "Метки: (нет)" . Но на Codeforces меток на одной задаче бывает много. Например, задача из топ-20 при сортировке по количеству решивших: "жадные алгоритмы, реализация, сортировки, строки". Вроде бы это задача A из раунда для div2, т.е. должна быть простой, но сделать такой вывод из тегов проблематично.
В итоге — и на Тимусе, и на Codeforces придется заглянуть в задачу, подумать над ней (а лучше — написать), и уж только после этого выдать в качестве задания.
Еще момент — сортировка задач. На Тимусе — по сложности (общий принцип ее описан в ЧаВо), на Codeforces — по количеству решивших. Да, на Тимусе есть шанс встретить простую задачу с высокой сложностью и не очень простую — с не очень высокой. Но в целом сортировка вполне адекватная (т.е. "выбросов" мало). На Codeforces — увы, информация о том, сколько человек решили задачу, не особенно хорошо коррелирует со сложностью оной. Возможно, частично помог бы фильтр вида "все задачи A div 2", но и они весьма неоднородны.
С точки зрения не только тренера, но и участника (правда, сферического в вакууме) — не так давно понадобились задачи на тему, которая на тимусе в задачах не очень высокой сложности затрагивается мало. Выбираем нужный тег в архиве Codeforces, смотрим, какие есть задачи...
Ну, во-первых, кроме этого тега на большинстве задач стоит еще 2-3-4 штуки. Это значит, что все это нужно уметь для решения? Или это альтернативные подходы? Опять же — не посмотришь / не попробуешь — не узнаешь... А если у попробовавшего участника не вышло — это задача на текущий момент для него сложная или же задача посильная, но смотрит на нее не с того ракурса? (про разборы — ниже).
Кстати, а список тегов где-то есть отдельно? Пролистывать список задач в поисках подходящего тега — это не очень удобно (и не факт, что найденный тег не существует в другом падеже / формулировке)
А как выбрать задачи определенной сложности из архива? (пока не нашла)
Тут могу быть пристрастна. Поскольку по жизни очень не люблю это "потом". Откладывать интересную книгу / фильм, встречу с друзьями, красивую одежду, вкусную еду, а также значительно более "крупные" вещи представляется в корне неправильным. По наблюдениям, "потом" не наступает. Появляются другие книги (которые тоже откладываются), одежда уже не радует (или не подходит), у еды истекает срок годности, а время растрачивается на кучу мелочей, и на действительно важные вещи его не остается.
Есть много возможностей найти хорошие командные контесты, когда и если это станет актуальным. На несколько циклов командных тренировок, думаю, можно насобирать без проблем.
Да, наверное, есть небольшая специфика, пожалуй. Критична ли она с точки зрения тренера? Не особенно, на Тимусе неплохо отражены многие темы, для остальных можно подобрать какие-то вещи с других ресурсов / подготовить свои задачи. Если же участник уже добрался до такого уровня, что может сам сформулировать для себя нужную тему для изучения — то задачи он тоже найдет.
И да, не всем нравятся задачи с условием вида "Пете на день рождения подарили массив" (на индивидуальных контестах небольшой длительности такие условия, наверное, оправданны). Сколько начинающих удалось "зацепить" задачами про капитана Джека Воробья, героев "Звездных войн" и других историй — посчитать сложно. Точнее, могу вспомнить только одного школьника, которому "все эти истории" не нравились. Правда, он еще хотел, чтобы в условии было "ну примерно написано, как решать".
"Простыней" и задач только на английском там все же не так уж и много (на первые несколько сотен, полагаю, не сильно больше десятка в сумме).
И — сугубо ИМХО — в условиях задач на Тимусе мне пока не попадались грамматические / пунктуационные / стилистические ошибки.
Что на Codeforces в среднем тестовое покрытие лучше — тут спору нет. На Тимусе случаются реджаджи, но чаще всего они инициируются внимательными пользователями, и процесс не носит систематический характер.
Однако разборы задач и доступность решений других участников с точки зрения тренера отнюдь не однозначное благо. Далеко не все тренируемые настолько мотивированы, что будут бороться с задачей "до упора" и станут смотреть разбор / решения только в крайнем случае.
В случае же с тимусом отыскать решение в принципе можно (хотя и не всегда), но искать надо уметь (новичок вряд ли сразу полезет в какой-нибудь блог на китайском языке). А в обсуждениях на форуме задачи можно иногда (тоже не всегда) найти полезный тест. Что волей-неволей стимулирует к придумыванию своих тестов — а это важное умение.
Конечно, в этом случае тренеру нужно выполнять "руководящую и направляющую роль", а также в подходящий момент продемонстрировать "хорошее" решение (но на то он и тренер).
Тут просто не с чем сравнивать (активно пользуюсь, в том числе в учебном процессе, и, пользуясь случаем, благодарю всю команду Codeforces за эти и другие замечательные вещи, которые облегчают жизнь тренеру и преподавателю).
Но при всем том, что Codeforces — отличная платформа, быть архивом задач далеко не главное ее предназначение.
Так что на практике получается примерно такая схема. Тимус (спасибо тем, кто его поддерживал и поддерживает) — для формирования навыка решения задач по какой-либо теме (или задач определенной сложности), тренировки на Codeforces (с задачами из публичных тренировок или собственными) — для "контроля" по теме, задачи из раундов — для тех, кто уже четко представляет себе "цель" (изучить определенный подход / технику).
Словом, хорошо, что есть и то, и это.
P.S. Административных прав на Тимусе у меня нет, есть свой небольшой "классификатор" задач (и собственные решения, которые мне кажутся правильными).