305A - Странное сложение
Простая задача на реализацию.
- Если у нас есть в множестве числа 0 или 100, то обязательно возьмем их в подмножество.
- Если у нас есть число, отличное от 0 и меньшее 10, возьмем его в подмножество.
- Если у нас число, отличное от 0 и 100, которое делится на 10 без остатка, тоже возьмем его.
- Если у нас есть число, отличное от чисел, описанных в пунктах 1 - 3 и в изначальном множестве нет чисел из пункта 2 и 3, то возьмем одно такое число.
305B - Цепные дроби
Указанные ограничения позволяют нам говорить, что представление рациональной дроби в конечную цепную почти единственно. Вернее их не больше чем 2. Поэтому построим жадно представление рациональной дроби в конечную цепную, и проверим, совпадают ли они.
305C - Иван и степени двойки
Во-первых, выполним все возможные переносы по степеням. Более формально, если у нас пара чисел, ai = aj, i ≠ j, заменим ее на одно число ai + 1. Теперь, когда все ai различны, то ответ очевиден — max(ai) — cnt(ai) + 1, где max(ai) — максимальное число в массиве, cnt(ai) — количество чисел в массиве
305D - Оля и граф
Во-первых, удобно расположить все вершины на координатной прямой. Далее в графе обязательно нужны ребра из i - > i + 1. Кроме этого, в граф можно добавлять ребра из i - > i + k + 1 (ребра типа 2). Не трудно доказать, что других ребер добавлять нельзя. Сразу считаем ребра, и определим, ответ 0 или != 0 . Далее ответ 0 еще тогда, когда все ребра 2 типа не имееют общего пересечения, если рассматривать как отрезки на координатной прямой. Причем это верно почти всегда, кроме случаев когда k ≥ n - 1. В этих случаях, ответ всегда 1. Теперь ответ != 0. Из всех ребер которые у нас есть, оставим только ребра типа 2. Если ребер типа 2 нет, то прибавим к ответу 1, так как мы сейчас можем ничего не добавлять. Иначе переберем вершину i, из которой мы проведем ребро 2 типа и аккуратно прибавим к ответу величину 2cnt, cnt — это количество вершин на промежутке от [i, min(i + k, n — k — 1)] из которых не исходят ребра. Причем важно, чтобы все имеющиеся ребра были на этом промежутке. Таким образом, это решение за O(n + m). Отмечу, что у этой задачи есть решение за O(m + log(n)). Однако, заходит и O(n + m).
Решение O(n + m) Решение O(m + log(n))
305E - Игра со строкой
Чтобы решить эту задачу, необходимы некоторые знания по теории игр. Рассмотрим некоторую подстроку строки s s[i... j], такую, что все символы с i по j являются центрами палиндромов, а символы i - 1, j + 1 уже нет. Утверждается, что такую подстроку можно рассмотреть отдельно. Каждую такую подстрочку нетрудно закодировать единственным числом: len — просто количество символов в ней. И так, будем считать grundy[len] — значение функции Гранди. Пусть мы решили удалить символ в позиции 0 ≤ i < len. Тогда нетрудно понять, что игра распадется на 2 независимых игры: У первой игры будет длина i - 1, а у второй len - i - 2, так как соседние к i символы перестанут быть центрами. Таким образом, получим решение за O(n2). Скажу, что еще есть решение за O(n), но опять таки, это уже не требовалось.
The sample (case #5)"2 1 2"on A — Strange Addition, the answer is "1 1".I want to know how to choose two distinct numbers in the set. Because of it, I failed the previous test.
I failed on pretest 5, the answer has only 1 number. I think the explanation is "if there is only one number in the set, you cannot find two numbers which don't meet the requirement, since 1 > 0, you should choose that number".
You means the pretest #5 is right?
Yes, answer contains at least one number, because it's always better than 0 number.
If there are only one number in set -> we cannot choose two distinct numbers, so for all (0) pairs conditions holds.
It is still hard to persuade me. Anyway, thank you for preparing the context.
Wrong name for 305E in the editorial.
Fixed
I am a bit confused about Div2 — P1 Why should I take all numbers x, (1 <= x <= 9) ??
I am a bit confused about Div2 — P1 Why should I take all numbers x, (1 <= x <= 9)?
Not all, only one
Now I am having doubt that I even understood the problem statement. :(
What does it actually require?
What I thought was that, I need to pick the largest subset such that for any two elements, a & b, one would have a 0 in its decimal place.
Seems like I got it all wrong...
Statement says: Vasya can only sum pairs of integers (a, b), such that for any decimal place at least one number has digit 0 in this place. So, for example, we cannot sum 10 and 20, because 10 and 20 has digits 1 and 2 at first decimal place.
You should pick the largest subset that for every two elements, a and b, there should be at least one zero in a%10 and b%10, at least one zero in a/10%10 and b/10%10, and at least one zero in a/100%10 and b/100%10.
I think this solution is much easier.
В разборе D небольшая путаница с тем, что обозначает k.
В задаче Е в чем смысл выбора l > 1? Это число больше нигде кроме условия не используется, а если условие проходит для l > 1, то пройдет и для l = 1. Тогда эта часть условия могла бы быть упрощена до "t[i-1] = t[i+1]" безо всяких l вообще.
Почему в задаче " Иван и степени двойки " такое решение ? Не могли вы бы объяснить решение по подробнее? P.S. Извиняюсь за то , что так поздно задаю вопрос!
в двоичном виде число 2^x — это единица и нули (или только единица). "Переносы по степеням" — это сложение всех пар равных чисел в массиве. Переносы необходимо сделать, чтобы общую сумму легко представить как последовательность нулей и единиц. В массиве будут храниться индексы позиций, на которых должны стоять единицы. Представим сумму чисел массива в двоичном виде. Ответ — разность максимального числа в массиве (количество цифр в двоичном представлении суммы) и количеству элементов в массиве (количество единиц в двоичном представлении суммы). Надеюсь, понятно объяснил =)
Вроде понятно=) Спасибо за разбор.
For C, how can one prove that the above relation would yield us the most optimal answer?