В последнее время для меня все актуальнее становится вопрос о том, какими же все-таки должны быть условия задач? Что должно содержаться в этих условиях и как это правильно сформулировать? Как избежать хотя бы малейшей двусмысленности?
При создании контеста я всегда считал составление условия самой сложной задачей. Всегда старался избегать написания условий задач, в которых нельзя обойтись коротким и понятным условием. Если при разработке контеста я читаю чужое условие, то я стараюсь максимально придраться к нему, чтобы ни у кого из участников не возникло ни малейшей двусмысленности. Я иногда рефлекторно защищаю свои (порой изначально двусмысленные) формулировки. Но, как только немного остываю, сажусь и стараюсь исправить все замечания до последнего. А после того, как исправляю, спрашиваю стало ли понятно теперь.
Часто бывает так, что ужасно хочется приплести к условию задачи какую-то жутко забавную легеду или, как зачастую кажется авторам, подходящую как нельзя кстати именно к этой задаче. При написании условия задачи надо всегда помнить, что легенда может увести участника от самой сути задачи настолько далеко, что лучше бы ему просто увидеть примитивное условие на языке математических обозначений. Часто легенды плохо согласуются с оригинальным пониманием условия, что сбивает с толку и заставляет участника непроизвольно додумывать какие-то дополнительные ограничения.
Если участнику непонятно какое-то обозначение из условия или как в примере получается именно такой ответ, то всегда можно написать примечание, которое снимет все вопросы. Тем не менее, примечание должно быть лишь вспомогательной составляющей условия. Условие без примечания не должно быть неполным и должно содержать все необходимые ограничения.
Очень важно заранее увидеть страницу, которую будет видеть участник. Некоторые важные элементы условия могут оказаться незаметны в конечном итоге из-за своего геометрического положения на листе бумаги или на экране монитора.
Важных пунктов при составлении условия - великое множество. Сложно перечислить все важные пункты, да я и не буду пытаться перечислить их все. Более того, всех пунктов я, наверное, и не знаю.
Всю эту тему я решил поднять из-за недавнего спора с одним программистом (если захочет, сам назовет себя) на тему того почему же я изначально неправильно понял условие задачи, которую мне недавно довелось порешать. Я погорячился и даже написал автору задачи (в индивидуальном порядке), что это условие написано некачественно. Лишняя агрессивность была вызвана тем, что я позорно слил этот раунд, и во мне бурлил негатив. Эту задачу я все-таки сдал во время раунда, но потратил на нее намного больше времени, чем потребовалось бы, если бы я изначально правильно понял формулировку. Спасибо тем, кто отвечал на вопросы, за то, что пояснили тест из примера. Это дало мне все-таки понять ту самую формулировку, которую подразумевал автор.
Для начала я полностью поясню ситуацию... Когда я прочитал условие, то сразу же обратил внимание на следующее предложение: "...Ктулху назовем такой неориентированный граф, который может быть представлен как набор из трех или более корневых деревьев, корни которых соединены простым циклом...". Я подумал, что конечно-же имеется в виду цикл, состоящий из трех и более вершин. Но зачем вот это "трех или более". "А! Наверное подразумеваются только деревья, состоящие из более, чем одной вершины" - подумал я. "Ну да, все логично! У Ктулху такая морда с висящими из нее штуками. Менее трех таких болтающихся из морды штук у Ктулху - не православно, вот отсюда и такое ограничение!" - вот, что я подумал следом и принялся набивать код решения именно такой задачи. Написав, я заметил, что на тесте из примера мое решение выдает не такой ответ. И действительно, если удалить цикл из него, то остается только два дерева. И тут в голове начинаю перебирать как же надо понимать условие: Может быть можно считать поддеревья отдельными деревьями? Может быть можно считать одинокую вершину тоже деревом? Я задаю вопрос жюри и свет проливается. Причем ответ был очень подробным пояснением, откуда же берется три дерева в тесте из примера. Да, теперь задача действительно решается одним дфс-ом, подумал я. В моем решении я просто убрал if на то, чтобы деревьев с количеством вершин больше 1 было не менее трех и отправил. Больше я к этой задаче не возвращался.
Позже, все кому я говорил о том, как много времени я потерял на этой задаче (таких было не так уж и много) тыкали меня носом в различные вещи. Кто-то в то, что я не додумал условие из теста из примера. А между делом, он и сам обратился к тесту из примера, чтобы разобраться. Кто-то винил меня в том, что я не прочитал примечание, а, соответственно, прочитал не все условие.
Лично я считаю, что условие должно быть таким, чтобы не требовалось разбираться в тесте из примера, чтобы понять, что же от меня требуется. А о существовании примечания я и знать не знал. Видимо, авторы не заметили того, что оно находится под двумя огромными тестами. А по скроллбару сложно ориентироваться, ведь в условии находится еще огромная (но не самая полезная) картинка. Как выяснилось, пояснение того, что дерево из одной вершины все же надо учитывать, находилось именно в примечании. А условие про "трех и более" означало тривиальный для меня факт того, что циклы не могут содержать менее трех вершин.
Человек, с которым я спорил, утверждает, что и без примечания все понятно и однозначно. Этот человек решил эту задачу, не задавая вопросов жюри, то есть понял с первого раза условие правильно. Именно он сказал, что я [начало цитаты] не полностью прочитал условие [конец цитаты].
Как мне показалось, ответ, который дали мне, был использован и ранее. Я могу ошибаться, но по-моему я не единственный из тех, кто задал такой вопрос.
И тут, собственно, остается много вопросов, по которым я бы хотел услышать мнение общества:
1) Было ли условие (без учета примечания) однозначным для понимания для Вас?
2) Можно ли выносить то самое ограничение на количество вершин в корневом дереве в примечание или же это часть условия? (опять же относительно Вашего мнения)
3) Достаточно ли заметны для Вас примечания под "примерами тестов" при больших высоте страницы и размерах этих самых примеров?