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

Автор DmitriyH, 11 лет назад, По-русски
Теги tc, srm, 603
  • Проголосовать: нравится
  • +79
  • Проголосовать: не нравится

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

Ребят, в арену не заходит :(

Пишет "Error, system is offline".

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

Как решать 500(div1)?

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

    Заметим, что пары строк, которые нас интересуют — это такие строки, что одна из них получается циклическим сдвигом из второй. Давайте считать, сколько в алфавите из k букв есть строк длины N с количеством различных циклических сдвигов равных L. Это равносильно тому, что нам нужно посчитать, у скольки строк период равен L. Значит, L — делитель N. Для того, чтобы посчитать количество строк с периодом L, используем что-то вроде принципа включений-исключений:

    f(L) = kL-(сумма f(c) таких, что с — делитель L и с меньше L)

    Чтобы узнать ответ, суммируем для каждого делителя N значение f(L) * L (для каждой строки ставим в пару ее циклический сдвиг)

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

      а ещё на прямую по принципу включений-исключений

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

Как решать 950 (div. 2) ?

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

1000 в див1, верно ли что достаточно завести вектора количества вхождений каждного элемента, и затем их перемножить и найти в какой позиции самое большое число?

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

    Нет конечно. Верно то же удтверждение, если бы произведение 2х чисел было операцией минимума

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

      Как тогда решать? :)

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

        static final int BUBEN = 10;

        Объяснять дальше? :-)

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

        У меня в дорешке n * sqrt(n) * log(n) тлешится, чуть-чуть не пролазит в 4 сек на двух тестах. А те кто сдали, с какой ассимптотикой это сделали?

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

          Ну если я понимаю правильно, то решение у Егора такое:

          Сначала возьмем каждого числа по одному, и с помощью Фурье (когда чисел по одному, мое утверждение выше с произведением и ответ Егора с минимумом -- это по существу одно и тоже) найдем все их попарные суммы. Затем уменьшим количество вхождений каждого числа на один. Повторим это 10 раз. Остались только числа, которые встречаются по 11 раз и более, их, очевидно, не более 10К, их попарные суммы находятся за квадрат.

          Получается 10*n log n + 10K^2.

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

          У меня n^2 в дорешке прошёл...

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

Можно ли решить 250(div1) через ДП по дереву?

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

    Понятно, что одним ходом можно закончить игру, оставив какой-нибудь лист. Тогда рассмотрим логику первого игрока. Он может всегда взять какой-нибудь лист. Ответ — это вес самого тяжелого листа. Предположим, что первый игрок может взять больше, чем самый тяжелый лист. Тогда он первых ходом не закончить игру, а отрежет кусок дерева. Понятно, что одним разрезом удалить все начальные листья нельзя. Тогда второй игрок своим ходом закончит игру, так как тогда результат будет не больше, чем наибольший лист, а первый игрок хочет больше. Таким образом лучшая стратегия — это первым же ходом отрезать наибольший лист.

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

      Я сдавал такое же решение.

      Но интересно можно ли было решить эту задачу именно динамикой по дереву. Вариант перебрать ребро и разбить на 2 подзадачи не срабатывает в данном случае.

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