Блог пользователя gridnevvvit

Автор gridnevvvit, 11 лет назад, По-русски

305A - Странное сложение

Простая задача на реализацию.

  1. Если у нас есть в множестве числа 0 или 100, то обязательно возьмем их в подмножество.
  2. Если у нас есть число, отличное от 0 и меньшее 10, возьмем его в подмножество.
  3. Если у нас число, отличное от 0 и 100, которое делится на 10 без остатка, тоже возьмем его.
  4. Если у нас есть число, отличное от чисел, описанных в пунктах 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), но опять таки, это уже не требовалось.

Решение

Разбор задач Codeforces Round 184 (Div. 2)
  • Проголосовать: нравится
  • +42
  • Проголосовать: не нравится

»
11 лет назад, # |
Rev. 4   Проголосовать: нравится +5 Проголосовать: не нравится

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.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    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".

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    If there are only one number in set -> we cannot choose two distinct numbers, so for all (0) pairs conditions holds.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      It is still hard to persuade me. Anyway, thank you for preparing the context.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Wrong name for 305E in the editorial.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I am a bit confused about Div2 — P1 Why should I take all numbers x, (1 <= x <= 9) ??

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I am a bit confused about Div2 — P1 Why should I take all numbers x, (1 <= x <= 9)?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Not all, only one

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      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...

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        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.

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        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.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I think this solution is much easier.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

В разборе D небольшая путаница с тем, что обозначает k.

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

В задаче Е в чем смысл выбора l > 1? Это число больше нигде кроме условия не используется, а если условие проходит для l > 1, то пройдет и для l = 1. Тогда эта часть условия могла бы быть упрощена до "t[i-1] = t[i+1]" безо всяких l вообще.

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Почему в задаче " Иван и степени двойки " такое решение ? Не могли вы бы объяснить решение по подробнее? P.S. Извиняюсь за то , что так поздно задаю вопрос!

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    в двоичном виде число 2^x — это единица и нули (или только единица). "Переносы по степеням" — это сложение всех пар равных чисел в массиве. Переносы необходимо сделать, чтобы общую сумму легко представить как последовательность нулей и единиц. В массиве будут храниться индексы позиций, на которых должны стоять единицы. Представим сумму чисел массива в двоичном виде. Ответ — разность максимального числа в массиве (количество цифр в двоичном представлении суммы) и количеству элементов в массиве (количество единиц в двоичном представлении суммы). Надеюсь, понятно объяснил =)

»
4 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

For C, how can one prove that the above relation would yield us the most optimal answer?