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

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

Через два часа (16:00 MSK) состоится Single Round Match 611. Не пропустите, и желаю удачи!

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

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

Как решать третью задачу div2?

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

Как решать 250 div1?

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

    Проверь — можно ли с помощью второго набора элементов получить каждый элемент из первого. Потом наоборот. Для проверки конкретного элемента одного набора можно использовать только те элементы из второго набора, на которые он делится. Если из lcm таких элементов получается проверяемый, значит его можно составить.

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

      Например, проверяем 12 для чисел 2, 6 и 4. 12 длится на 2, 6 и 4, но lcm (2,6,4) = 24, 24!= 12, а значит по вашему алгоритму его составить нельзя. Хотя его можно составить из 2 и 6.

      В чем неправда?

      UPD: А кажется Lcm 12, все понял:)

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

Как нормально решать 550 div 1? Я думал над какой-то ДП по подмножествам, потом ничего не придумал, написал решение, которое запускает градиентный спуск кучу раз, пока не наступит ТЛ, и оно прошло. Мне интересно точное решение, которое можно доказать. Вроде бы, я ни у кого не видел динамику по маскам, а тогда не ясно, почему ограничение до 20.

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

    Да, я тоже долго думал, как решать по маскам — вообще ничего не придумал. Потом открыл решения и удивился, ни у кого 2^ нет. А можешь подробнее идею описать, как конкретно писал спуск?

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

      Генерим какое-то случайное дерево. На каждом шагу градиентного спуска повторяем следующее. Удаляем одно случайное ребро и выбираем случайное ребро из тех, которые соединяют разные компоненты связности и при этом уменьшают ответ. На одной итерации град. спуска мы попробуем удалить 10 случайных ребер, после чего выберем одно, которое сильнее всего улучшает ответ (как проверять улучшение, я написал). Когда 15 итераций подряд мы не смогли улучшить ответ, делаем брейк. Теперь опять строим случайное дерево и повторяем все с самого начала, пока не наступит ТЛ.

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

    Если знать среднее арифметическое длин ребер в оптимальном решении — пусть это будет m — то сами ребра можно восстановить, найдя минимальный остов в графе, где ребра с изначальным весом x весят (x - m)2. MST зависит только от относительного порядка весов ребер, значит если перебрать все такие порядки(зависящие от m), то можно найти ответ. Ну а два ребра с весами x1, x2 меняют относительный порядок когда , генерим все эти точки, сортируем, на каждом промежутке берем m и ищем остов.

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

    Ограничение до 20 потому, что решение за O(n6logn)