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

Автор Tima, история, 9 лет назад, По-русски

Прошел четвертый этап XV Открытого Кубка по программированию. Как решать задачу D?

  • Проголосовать: нравится
  • +28
  • Проголосовать: не нравится

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

Задача K — WA 13 у кого нибудь кроме меня было ?

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

По D у нас была такая идея (сдать не получилось):

Рассмотрим простое число, на которое будет делиться НОД. Для каждого такого числа сохраним отсортированный список позиций, на которых находятся числа, которые делятся на это простое число. Суммарная длина таких списков будет , т.к. каждое число войдёт не более, чем в чисел. Далее Будем считать, что у нас есть массив из 1 (сохранённые позиции) и  - 1 (позиции, числа в которых не делятся на p. Нам нужно найти самый длинный подмассив с положительной суммой. Задача, кажется, известная. Мы пытались решить с помощью дерева фенвика...

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

    Можно просто отсортировать префиксные суммы и дальше за O(n).

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

for every prime number P get list of positions i, where a[i] is divisible by P,
Let's denote positions as p.

So, we need to find, (j, i) such that p[i]-p[j] is maximised and next condition is hold
* p[i] — p[j] + 1 <= 2 * (i — j + 1)
or p[i] — 2*i <= p[j] — 2*j + 1

By using interval tree, for one prime, time complexity is O(|p|log(|p|))
Overall time complexity: O(n*log^2(n))

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

    When working with a prime P[i], I always built the segtree with the vectors related to that prime. And started to find the maximum index. It was a nice problem to solve during the contest time.

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

Что такое WA31 в Е?

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

C: Apply Burnside's lemma. We don't need to try all permutations: if the permutation graphs of two permutations are the same, we get the same results, so the complexity is O(partition_number(N) * something). Still my program required 10 minutes on the max test, so I computed all answers locally.

F: I believe we need bitset here — does anyone know a good way to use bitset when the length is not fixed?

K: Here is the tricky case: 1 4 | | 2-5 | | 3 6 Edges 1-2, 2-3, 4-5, 5-6 can't be in the decomposition at the same time.

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

How to solve L?

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

    Find centroids of the first tree, can be one or two centroids, try both.
    Find centroids of the second tree. If there are two centroids try both.
    We will try all combinations of centroids. Let's denote centroid of the first tree as v and centroid of the second tree as u.

    Now, we will assume that the vertex v is the vertex u in the second tree.

    We try to compare two subtrees recursively,

    bool isSame(v, u);

    Here, subtree u in the second tree should have one more vertex than subtree v.

    Now, we will compute hashes of subtrees of children u and v, after that try to match two arrays of hashes, there should remain exactly one non-matching subtree from both tree. Check them recursively.

    P.S. I may miss something. :)

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

      Hi! Please can you tell why we cannot do that:

      1. Find all powers of first tree ( A )
      2. Find all powers of second tree ( B )
      3. Sort both of them in non-increasing orded.
      4. Iterate through all leaf ( power == 1 ) from second tree and check next condition:
      5. Get power of parent of that leaf ( x )

      6. Find first power which equal x and descrease it by 1
      7. Sort B again
      8. Compare two arrays A and B if they are equal we have leaf number and remember minimum of that's numbers
      9. If A!=B increase first power in B which equal x-1 by 1.
      10. Next iteration

      Sorry for my English, hope you understand me.

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

        Shortly, your proposition is: If degree sets of both trees are equal, then you conclude that trees are also equal? If I understood correctly, this should be Counter Example: Counter Example

        First Tree:
        1-2, 1-3, 2-4, 2-5, 3-6

        Second Tree:
        1-2, 1-3, 2-4, 2-5, 5-6

        Be the way, how to upload a picture to Codeforces?

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

          Yes, I suggest it. Thank you for your answer. But this part is hard for me because I cannot find some counter examples.

          Anyway, thank you much.

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

      How do you compute hashes of subtrees?

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

Как решить H и G?

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

    G — 1. Искал (перебирая) пары таких клеток, которые обменяв местами, две клетки становились на свои места. 2. Если таких больше небыло, тогда обменивал любую пару нетронутых клеток, так чтоб одна встала на правельное место, и возвращался на первый пункт.

    • »
      »
      »
      9 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится -8 Проголосовать: не нравится

      Кстати, я тут получил "Presentation error test 2", когда послал решение, которое ничего невыводит в указанный для вывода файл "puzzle-swap.out", а выводит ответ в stdout, непонимаю, как прошел тест нр. 1.

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

        Тестирующая система принимает стандартный ввод-вывод вместо файлов. Всегда так пишем. Не знаю можно ли комбинировать: чтение из файла, а вывод в stdout.

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

          Я читал из файла, а выводил в stdout. А про выше написаное — незнал, зачем тогда вообще эти файлы указанны.

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

        Presentation Error — это нарушение формата. Формат можно нарушить, выведя не туда, а можно и как-то ещё. Второй тест — скорее всего, минимальный (уже отсортированная таблица, ответ 0).

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

    В G почемуто заходит следующее:

    1) Перебрем все перестановки строчек.

    2) Внутри 1) переберем все перестановки столбиков.

    3) Выполним эти перестановки. Потом все оставшееся добьем перестановками элементов.

    H — будем перебирать шаг, на котором число N может вычеркнуться, начиная с 2. Пусть это шаг равен k. Если N делится на k — ответ -1 (мы вычеркиваем наше число). Иначе, до него есть ровно N/k чисел, которые вычеркнутся, значится позиции уменьшится на N/k. Моделируем до тех пор, пока k не превзойдет N. Можно запустить эту программу и увидеть, что для N = 1012 делается около миллиона операций (это без учета того, что ответ может быть -1, то есть это оценка сверху)

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

      В G ясно, что это должно заходить. Пусть мы сперва поменяли какие-то элементы, а потом строки. Тогда ясно, как изменить порядок на обратный. Аналогично для столбцов/элементов. Строки и столбцы вообще независимы. Итого, из правильно ответа легко получить правильный ответ такого вида

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

    Примитивное решение было.
    1)Для каждого числа при счёте запоминаем его координату в первый массив. 2)теперь создадим ещё нейкий массив, в котором будем для числа хранить его координату(которую это число должно иметь в отсорченом массиве) 3)теперь просто перебор бежим i от 1 до 16 и смотрим если координаты i числа из первого массива не равны координатам i числа из второго массива то производим замену чтобы найти то число на которое нужно поменять пробегаем от j 1 до 16 снова и если координаты этого j числа из первого массива равны координатам i из второго массива то меняем местами эти две ячейки

    http://pastebin.com/1UVBmJgZ

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

how to solve K, E, H, F ?(div2)

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

Кому-то удалось сдать K в div2? Мы постоянно получаем WA2, даже при попытке заслать правильное решение из div1 с поправкой на то, что корень всегда в вершине с номером 1.

Идея нашего решения: для каждого ребра посчитать количество запросов, которые через него проходят. Это можно сделать стандартным трюком с lca и динамикой по дереву. Потом суммируем количество запросов по всем ребрам и вычитаем самое тяжелое ребро выходящее из каждой вершины.

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

Расскажите пожалуйста, а зачем в интерактивной задаче создаются файлы input.txt, если они не работают? https://www.diffchecker.com/azmuvqut

Час дебажили буквально, потому что приходит WA1 и абсолютно непонятна причина.

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

    А что написано в условии задачи?

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

      стандартный ввод или input.txt

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

        В PDF?

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

          В pdf stdin.

          Но это же не дело, когда в pdf одно, в Яндекс.Контесте другое. Мое решение работает и с stdin, и с input.txt. Оно не работает только в случае "есть input.txt, который не используется".

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

            В Яндекс.Контест вообще условия на этом Гран-При не загружались.

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

              Ну я вот эти читал: http://imgur.com/4wgKnYw

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

                Интересно; возможно, что загрузили сами авторы; как минимум, я никаких условий, кроме pdf, не загружал.

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

                  Ну я без претензий, если что, просто в целях улучшения системы.

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

                  Нам одним пришлось решить задачу G без условия, только по сэмплу, и считать что это нормально?

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

                  Not bad :)

                  В самом начале был клар " Statements can be uploaded as PDF file.", и в той pdf-ке условие есть — и в английской, и в русской версии)

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

                  О_О" Там есть условие!

                  Не одним.

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

                  'can be', but not 'should be' :)

                  Они еще назвали ее «Головоломка», все сходилось.

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

                  Пора уже привыкнуть ко всем этим яндексовским фишкам:)

                  Кстати, без условия мне эта задача больше нравилась. В этом была какая-то изюминка что ли :)

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

                  Лол. Я думал суть задачи как раз догадаться до условия.

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

              Да, я загружал, потому что lperovskaya попросила. А с этой задачей не справился, потому что табличка в условии, а как делать в yandex.contest таблички, я так и не понял. Ну и копировабельные сэмплы тоже приятный бонус.
              Но да, написать "посмотрите pdf версию" я не догадался. То, что задача оказалось удачной для решения без условия это интересный эффект.

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

В задаче "J" нечитал пояснения к примеру, так как он был понятен и непротиворечил условию задачи. Написал то чего просили в условии — незашло.

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

Есть способы бороться с тем, что перед каждой посылкой мы должны менять язык со Scala на плюсы? Раньше что-то мы с такой проблемой не сталкивались.

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

What about F?

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

    It's extended Euclid algorithms. You should write it with bitsets and optimize until done.

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

      I think I know solution with complexity (uses sqrt-decomposition and Karatsuba algorithm, also can benefit from bit operations). It's highly unlikely that in Java O(n2) solution would pass, and I don't want to implement my idea, so it would be very nice if one of the contest authors could comment.

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

Скиньте, пожалуйста, условия див1, я всё перерыл, но ничего не нашёл.

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

I used segment tree for solving problem D. At first I stored the positions for every prime that is divisible by D. Then for every prime, I built segment tree each time and query the maximum index such that the condition is held: p[i] — p[j] + 1 <= 2 * (i — j + 1) Every time building a segment tree is enough efficient because it costs only n*(Log(n)^2) time.

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

Can anyone share their solution for problem G?