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

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

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

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

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

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

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

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

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

»
11 лет назад, скрыть # |
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))

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

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

»
11 лет назад, скрыть # |
 
Проголосовать: нравится +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.

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

How to solve L?

  • »
    »
    11 лет назад, скрыть # ^ |
    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. :)

    • »
      »
      »
      11 лет назад, скрыть # ^ |
       
      Проголосовать: нравится +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.

      • »
        »
        »
        »
        11 лет назад, скрыть # ^ |
        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?

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

      How do you compute hashes of subtrees?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    http://pastebin.com/1UVBmJgZ

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

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

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

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

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

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

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

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

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

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

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

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

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

What about F?

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

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

»
11 лет назад, скрыть # |
 
Проголосовать: нравится 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.

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

Can anyone share their solution for problem G?