Идея написать что-то подобное у меня возникла еще после сборов в Петрозаводске, где Михаил Мирзаянов прочитал лекцию о том, как правильно готовить контесты. На мой взгляд, лекция была очень правильная, и было бы здорово увидеть ее здесь, на Codeforces. Спустя некоторое время тема забылась, но фейл (полный провал - прим. Артема) с условиями на 58 раунде напомнил о ней. Хочу обратить внимание, что все написанное здесь это, конечно, наше мнение, но оно все же основано на довольно большом опыте.
Идея написать что-то подобное у меня возникла еще после сборов в Петрозаводске, где Михаил Мирзаянов прочитал лекцию о том, как правильно готовить контесты. На мой взгляд, лекция была очень правильная, и было бы здорово увидеть ее здесь, на Codeforces. Спустя некоторое время тема забылась, но фейл (полный провал - прим. Артема) с условиями на 58 раунде напомнил о ней. Хочу обратить внимание, что все написанное здесь это, конечно, наше мнение, но оно все же основано на довольно большом опыте.
Итак, из чего состоит условие задачи? (сверху вниз, затем слева направо):
- Название
- Ограничения (Time Limit, Memory Limit)
- Текст условия
- Перевод условия*
- Формат входных данных
- Формат выходных данных
- Источник и приемник данных
- Тесты
- Комментарии к тесту*
* - опционально
Теперь обо всем по порядку.
Название
Единственная часть, которая может быть предоставлена авторам без ограничений. Однако:
Ограничения
Ограничения обязательно должны быть указаны для каждой задачи! Кроме того, нужно сообщать об особых параметрах для некоторых языков (например Java) если такие есть.Текст
Самая важная часть задачи. В ней, как правило, авторы любят проявлять свою фантазию. Следует понимать, что текст можно разделить на две части: сказку и полезную информацию.
Перевод
Все правила, обозначенные для текста на родном языке, должны применяться и здесь. Кроме того, часто бывают ситуации, когда вы не знаете как перевести ту или иную фразу. У вас есть два варианта:
Формат входных данных
Арни огорчает описание входных данных на полстраницы. В этом пункте должен описываться формат данных, а никак не сами данные и их назначение. Например, если в задаче нужно найти точку пересечения двух прямых, то в тексте должно быть сказано, что заданы две прямые, а в этом пункте - формат, в котором эти прямые задаются.
Условно можно разделить задачи на две категории: задачи на форматирование текста и все остальные. Все нижесказанное относятся только к задачам второго типа.Формат выходных данных
То же самое: только формат данных, а не что вы требуете в задаче.
Потоки ввода и вывода
Как правило, используются стандартные потоки (stdin, stdout) или файлы.
Тесты
О правильной подготовке тестов подробно рассказано в презентации Михаила Мирзаянова. Очень надеемся, что она появится на Codeforces.
Комментарии к тестам
Удачи и успешно проведенных контестов!
Надо чтобы с ней в принудительном порядке ознакамливались все люди, готовящие контесты :)
http://code.google.com/codejam/problem-preparation.html
Что-то похожее
И по-поводу
"Обязательно используйте одинаковое написание стандартных слов во всех задачах (YES/Yes)."
Сразу вспоминается один раунд SN*S, где во всех задачах было DataSet #1:, а в одной DataSet 1:, и это при формате, где каждый штраф - это -0.2 задачи... Я там, как и почти все, свои заслуженные -0.2 задачи на этом поймал.
А замечание такое: делать длинную легенду, в которой встречается крайне важное для решения слово, причём это слово thousand, может быть и полезно. В качестве подготовки к финалу ]:->
Хорошая статья, но немножко общая. А поскольку тут все-таки один конкретный codeforces, то можно просто часть правил сделать обязательными для всех контестов сайта, сформировав таким образом некий "фирменный стиль". В принципе, сейчас уже наполовину так и есть, просто нигде в одном месте не собрано и не прописано.
В основном это, конечно, будет касаться форматов входных/выходных данных, но можно включить и некоторые правила по оформлению условия или даже упорядочить всякие мелочи типа того что "Yes" всегда пишется как "Yes", но чекеры принимают и как "YES".
Ну, с YES/Yes в чекерах не настаиваю, может и правда перебор уже.
А что касается всякой фигни, то автор примерно один, а участников много и пишут они на разных языках, в которых ввод и вывод устроен по-разному. Чтобы случайно не превратить для кого-нибудь обычную задачу в задачу на разбор/форматирование текста(или еще какую свинью подложить) лучше все-таки придерживаться некоторых ограничний при составлении тестов и допускать некоторые вольности при проверке вывода.