Я бы не сказал, что это конструктивная критика, да и критика вообще. Скорее немного о наболевшем, да и чужое мнение узнать интересно.
Итак, название темы как бы намекает на задачу D (div 2) она же B (div 1) а именно о случае k>n.
Возможно, я, в силу своей неопытности, проиграл законно, но все же поменять приятное место в десятке на билет эконом-классов в позицию 83. И все из-за действительно несуществующей подстроки.
Возможно, это всего лишь мое дилетантское мнение, но впредь хотелось бы, что бы авторы старались избегать подобных случаев, действительно, зачем искать несуществующую подстроку, да и пустое множество читать слева направо и справа налево не доставляет много удовольствия, особенно в 2-часовой стрессовой ситуации. Задача и без этого интересная, и содержательная. Но вот такая мелочь из хорошего тура с удовлетворительным результатом делает неприятный осадок на день (да, эмоциональный через край), что поделаешь, действительно обидно. Хотелось бы услышать мнение более опытных и авторитетных членов сообщества.
Тем не менее, в целом тур удовлетворяет, как и всегда. Спасибо авторам, и тем, кто, возможно, оставит здесь комментарий по делу. Спасибо.
Предисловие: Мне этот раунд очень напомнил раунд Сергея Ведерникова с отличными задачами и ужастным контестом.
А теперь по сути.
Да, меня этот момент тоже смутил. К счастью, на КФ можно задать вопросы. К несчастью, как я понял, авторы раньше не давали раундов на КФ и не знали того, что мне практически в начале моего раунда сказал Артем Рахов — мы стараемся не отвечать "без комментариев". Так что получив "БК", я пробормотал пару нелестных вещей в адрес авторов и продолжил думать — уже через 3 минуты я получил более-менее нормальный ответ. Так что разобраться конкретно с этой проблемой было можно. Как, в общем, и с люыбым другим вопросом по условию, и это замечательно.
Меня смутил больше другой момент. Как минимум для одного из авторов русский язык вроде бы родной.. А в условии формулировка про "отрезок СД" что до, что после правки оставляет много непоняток, тесты из условия не полностью помогают, так как в первом тесте всегда выбирается один и тот же отрезок СД, в условии несколько раз фигурирует величина С и с в разных смыслах, не сразу ясно из условия, что хотя даны вероятности, каждая из них от 0 до 100, а вовсе не сумма, и т.д. То есть я не могу сказать, что условия (особенно после правки) были некорректны, но.. Судоку тоже можно иногда решит без перебора, последовательно анализируя, что у нас есть — так и с этими условиями, из них все можно вывести, но не сразу. Я не берусь утверждать, но мне кажется, что авторы не очень часто давали раньше задачи, и попали в ловушку, в которую часто все попадаються — "я знаю, что надо сделать и я знаю, как это сделать — значит условие ясно, а задача легкая". Вот и получился раунд, в котором А Б С Д должны были быть Б С Д Е...
On the brighter side of things, хочу заметить, что это один из лучших проблемсетов — задачи достаточно оригинальны, в них нужно приложить очень неплохо думалку, особенно порадовала задача Б. Даже стандартное дерево отрезков подали так, что многие его не очень то и порешали. (Хотя, может это с другим связано).
Интерестно было бы послушать и другие мнения.
Благодарю за развернутый ответ и оперативную реакцию. Впредь действительно буду задавать вопрос авторам. Первое что я сделал прочитав задачу про подстроки-палиндромы — посмотрел в ограничениях есть ли надпись k<=n не нашел — задумался. "Наверное ответ 0, хотят подловить" — проскользнула неверная мысль, а она, очевидно, не подразумевает задать соответствующий вопрос. Увы. А задачи действительно хорошие.
Мне также пришёл хороший ответ от жюри насчёт k>n, что меня очень порадовало, и за что я тоже благодарен организаторам!
А кому был задан вопрос? Однажды наткнулся на такую же проблему с пустым множеством, задал вопрос и был попросту проигнорирован.
Задавал вопрос через систему, кто лично ответил — не знаю :)
Возможно автор поста хотел услышать и не мое мнение, но я все-таки отвечу) Контесты подобные codeforces round хороши тем что в них вы не получаете никакой прямой выгоды от результата, это не всерос где на кону стоит диплом, дающий президентскую премию и поступление, и не раунд TCO с призом — поездкой в штаты. В такой ситуации контест вполне может содержать некий образовательный момент. Это и был один из них, мы намеренно не стали оговаривать это в условии, предоставив участникам самим подумать об этом случае (а ведь о нем еще надо вспомнить) и разобрать его. Может быть то, что Вы теперь имеете большее представление о пустых множествах и вообще понимаете что подобные случаи в задачах могут быть, ценнее 10 места div 2 codeforces round #107?
+
Поскольку я получил высшее образование по специальности "математик", мне сложно согласиться. Один раз изучив "формальную" логику, трудно перейти обратно к "бытовой". Можно даже сказать, что такие задачи в соревнованиях по программированию полезны: ведь многие баги в реальных программах как раз и возникают в вырожденных случаях, и в них программа ведёт себя формально корректно, а не в соответствии с бытовой логикой.
Зато могу посоветовать пару соображений и упражнений с пустыми множествами для перехода от "бытовой" логики к "формальной".
Если какая-то функция F (например, сумма, максимум, произведение) определяется на множествах (последовательностях, наборах), удобно было бы определить её естественным образом для любого множества. Иначе каждый раз придётся разбирать случаи, и для сложных объектов их количество будет очень быстро расти. А естественность значит, что для непересекающихся A и B хочется получить функцию от объединения равной этой же функции, применённой к значениям на A и B по отдельности: . Скажем, для суммы хочется SUM({2, 3, 4, 5}) = SUM({2, 3}) + SUM({4, 5}), для максимума max({2, 3, 4, 5}) = max(max ({2, 3}), max({4, 5})), и так далее. Подставим . Значит, для естественности нужно .
Получается, что для суммы нужно , откуда . Аналогично для максимума , то есть должен быть не больше максимума от любого другого множества. Значит, придётся сделать .
Упражнение 1: чему равно произведение пустого множества чисел, и почему? (ответ: 1)
Упражнение 2 (стащено у Дмитрия Павлова): определим башню степеней от последовательности:
(вычисляется "сверху вниз": сначала $a[n - 1]$ возводится в степень a[n], затем a[n - 2] возводится в степень — результат предыдущего шага, и так далее). Чему равно ?
Ещё можно прочитать пространную статью в Википедии (на английском) об утверждениях о пустом множестве.
Из условия задачи ИМХО, достаточно сложно понять что за "естественность" авторы предполагают. Я в своем вопросе авторам относительно этого момента привёл пример k = 5, n = 4. В таком случае строка aaba может являться подстрокой некоторого палиндрома длины 5 (aabaa) а строка aabc не может являться подстрокой палиндрома длины 5. Я считаю в данном случае нужно либо расширить условие, чтобы из него стало ясно относительно природы строк, нафига мы эту задачу решаем, чтобы правильно доопределить понятие целевой функции для k > n, результат которой от инпута ждут от нас в аутпуте. Либо не страдать фигнёй, а нормально писать условия, разруливая такие моменты ограничениями (k <= n) или явным указанием того, что ожидается увидеть в данном случае.
Речь, я полагаю, идет о случае k > n в 150B - Количество строк? Ну... небольшая подстава, да, бывает такое в задачах ;) В принципе, не фанат подобного, но простой подход — разбирая случаи, разбирай их все.
Гораздо больше "не в традициях жанра" в задаче для второго дивизиона не объяснить, что же такое "строка над алфавитом". И речь даже не о том, что кто-то это может просто не знать.
Вот, например, Билл Смит. Его определение строки ("Computing patterns in strings"), данное в самом начале, допускает бесконечные строки, циклические строки и прочие прелести жизни. То, что понималось в условии, он называет "linear string" (причем не допуская при этом в определении пустую строку). Для циклических строк верны все примеры. Для циклических строк, например, ответ при k > n зависит от определения понятия "подстрока".
GlebsHP Благодарю за критику, действительно, выиграть не главное, и цель моя — обучение. Но тут собака и зарыта. Я ведь придумал решение задачи. Относительно быстро, что весьма обрадовало. А сдать не смог. Вот почему обидно. Однако своего я добился, узнав с помощью этого поста много интересных мнений.
Отдельное спасибо Gassa, за развернутое докладное объяснение, благодарю еще раз, обязательно изучу.
Alias — именно это я и имел ввиду: "явным указанием того, что ожидается увидеть в данном случае."
Спасибо еще раз всем, кто не прошел мимо. Этот тур действительно добавил очередное знание в мою копилку, и, разумеется не без вашей помощи =)
В данной задаче мне кажется нормально думать так: переберём все подстроки длины k строки длины n и отметим те элементы исходной строки, которые должны быть равны исходя из подстрок, которые должны быть палиндромы. Но сколько существует подстрок длины k для строки длины n? Если n>=k то n-k+1, иначе 0 (кажется это достаточно просто понять). Рассмотрим случай n<k: пробежим по всем строкам, коих ноль штук и выполним что-то. Значит предыдущую операцию чтобы там ни было мы не сделаем, а значит не найдётся ни одного утверждения, что в исходной строке какой-то символ должен быть равен какому-то другому. Значит все символы строки могут быть различны и ответ n^m.
Когда я писал этот пост, то надеялся увидеть в ответ именно пост, начинающийся так, как начинается Ваш. Возможно в следующих турах подобный способ мышления мне поможет. Благодарю.
Сначала: Рассмотрим случай n<k: пробежим по всем строкам, коих ноль штук Затем: Значит все символы строки могут быть различны и ответ n^m.
Так сколько же их всё-таки ноль или n^m?
Подстрок — 0 . Строк удовлетворяющих условию — m^n (все возможные строки длины n)
Логично, именно так я и подумал на контесте. Еще я подумал, что это задача B и баллов за неё дают столько же сколько за A, и еще подумал
'что авторы в данной ситуации не правы, потому как я задал вполне оправданный вопрос, ответ на который не следует из условия, и на него ответили "В условии точно написано что Вас просят посчитать" ',
(придумайте сами "нецензурное" слово, характеризиующее авторов в данной ситауции сами, ибо администрация попросила меня переиначить этот комментарий, чтобы он стал более "толерантным)" и идут они лесом, если это не пройдёт. Но в данной ситауции авторы, ИМХО, 'не правы' (тоже слово). Задача 500, зачем выделываться? Это как TC-div2-250. Зачем изгаляться над нервными участниками толькочто (минут 5-10 назад) приступившими к контесту? А также замечу, что в некоторых случаях логично путое множество принимать за множество X (всевозможные множества). Если бы с пустым множеством все было всегда все так просто и логично, то небыло столько срачей на эту тему. Думайте что хотите, делайте контесты как вздумается, но и я про таких авторов буду думать то, что подумал и про данных.
UPD:
Пример, заслуживающий внимания авторов, если они каким-то чудом, не знакомы с ним в силу своего опыта (во что я не верю)
ru.wikipedia.org "Просте число — это натуральное число, имеющее ровно два различных натуральных делителя: единицу и самого себя"
Далее идёт уточнение насчет еденицы, ибо этот момент не очевиден. Вы считаете это "для тупых" пояснение? Странно, но когда я думал над этим моментом в младшых классах школы, мне показалось логичным, точно пояснять что подразумевается по поводу граничных случаев, если возможны двоякие толкования.
Вообще в множество простых чисел то включают еденицу, то исключают из него еденицу, в зависимости от удобства толкования, пояснения, наглядности повествуемых свойств. То Же наблюдается с "Натуральными" числами, то принадлежит к нему ноль, то нет. В зависимости от языка, цели, удобства. Чаще всего по русски не включают, по английски включают, но на усмотрение автора.
В этой задаче не было двоякого понимания условия.
Я помню в седьмом классе на олимпиаде по математике была задача про рыцарей и лжецов, где каждый говорил "справа от меня сидит три рыцаря". И на разборе один из неверно решивших ее участников с пеной у рта доказывал, что если лжец такое сказал, значит справа от него сидит три лжеца, а не по крайней мере один лжец. Схожая ситуация -- человек не знает математику, и обвиняет организаторов математической олимпиады в том, что в условии задачу ему не разжевали.
Если пишешь соревнование по программированию, разумно уметь мыслить логически. И не в седьмом классе мы уже тут в большинстве своем.