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

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

Имеется ряд из N лампочек, которые пронумерованы от 1 до N. Изначально ни одна из лампочек не горит. Далее происходит K последовательных линейных инверсий этого ряда ламп. Под линейной инверсией понимается инверсия каждой P-й лампочки в ряде. Например, если P=3, то произойдет инверсия 3й, 6й, 9й и т.д. лампочек.

Требуется определить: сколько горящих лампочек останется после реализации всех заданных линейных инверсий?

Объясните пожалуйста, как решить данную задачу?

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

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

Ограничения в студию

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

    В первой строке входного файла INPUT.TXT заданны числа N и K – число лампочек и число линейных инверсий. Вторая строка состоит из K целых чисел Pi, задающих период данных инверсий. (1 <= N <= 109, 1<=K<=100, 1 <= Pi <= 50)

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

Задача

Решается методом включений-исключений.

Можно поискать ее обсуждение в сети, решение есть, например, здесь

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

    Забавно, как описание albom-a из моей ссылки расползлось по интернету :)

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

    Этот алгоритм дает TL.

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

      Нет, не дает. НОК-ов надо рассматривать не 2^N, а гораздо меньше.

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

        А по подробнее можно.

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

          Что именно поподробнее? Было две ссылки, в первой было обсуждение, в котором у участников тоже возникали сомнения в скорости алгоритма. Я же вряд-ли смогу расписать понятнее, чем написано там :)

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

            [Вот моя задача] На 8 тесте TL или я не оптимизирую решения. (http://pastebin.com/4mGUUha1)

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

              При таких вычислениях некоторые НОК-и ты будешь считать несколько раз. Можно попробовать оптимизировать, сортируя после каждого добавления НОК-и (внутри цикла до m) и объединяя одинаковые. Но лучше переписать это на другом языке (например, С++) с использованием ассоциативных массивов (map).

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

                ИМХО, проще свой хешмап написать

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

                  Думаю, не проще переписывания на другой язык :)