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

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

Менее суток осталось до раунда 2B, не забывайте! Начало в 20:00 MSK в субботу.

50 человек проходит в раунд 3.

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

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

Стоит напомнить, что те, кто уже прошел, имеют право поучаствовать в TCO 2B Parallel Round

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

а те, кто не прошел во второй раунд, могут писать вне конкурса?

PS. Понятно, нет

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

Почему в Medium не работает решение "переберем подотрезок первого хода, а дальше промоделируем жадно"?

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

    а почему это именно подотрезок?

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

      Ясно, спасибо. Несложно доказать, что подотрезок (на отсортированном массиве, конечно) выбирается при b.size() == 2. Показалось, что на в общем случае это тоже верно.

      А жадное моделирование после выбора подмножества ведь уже работает? UPD: работает, уже снизу ответили.

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

    Потому что выбранные книги не обязательно подотрезок, например при

    books = { 1, 5, 6 }

    moves = { 2, 2, 1 }

    нужно выбирать { 1, 6 }

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

      А если выбирать всегда часть самых маленьких и часть самых больших, тоже не будет работать?

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

        Тот же семпл.

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

          Ну как же, тут мы попробуем все три множества: { 1, 5 } { 1, 6 } { 5, 6 } Т.е. перебираем сколько книг возьмем с начала, остальные берем с конца. Идея как бы в том что мы хотим сколько-то очень тяжелых для соперника и сколько-то максимально легких для себя.

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

            Наврал, другой тест:

            Пусть мы должны получить большую книгу из 2х. Тогда надо выбрать с минимально разницей

            books={1, 100,101,1000}
            moves={2,1}
            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится +11 Проголосовать: не нравится

              Да, на этом тесте не работает. Спасибо за объяснение.

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

    Он не обязательно подотрезок Например, пусть moves = {4, 3, 1}, а books = {10, 9, 3, 2, 1}. Тогда надо брать 10, 3, 2, 1, так как нам достанется две средние книги

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

    А с чего бы первым ходом должен быть подотрезок?

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

Как решать 550?

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

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

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

    Заметим, что кроме первого хода выгодно скидывать большие книги.

    Занумеруем книги, взятые после первого хода, посмотрим, что кому попадет.

    Далее динамика за первого игрока:

    [сколько книг посмотрели(из всех)][сколько выбрали]

    ну и ответ будет в dp[books.size()][moves[0]]

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

    Понятно, что начиная со второго хода выгодно передавать самые тяжелые книги. Таким образом можно посчитать, кому какая по порядку среди выбранных книга достанется. Остается запустить двумерную динамику, в которой состояние (мы взяли k из m самых тяжелых книг) -> (самая большая разница, самая большая сумма при такой разнице)

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

Расскажите, пожалуйста, тысячу.

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

    Ну, понятно, что у каждого числа первая цифра — 1, так что надо найти в каждом числе сколько раз сменились разряды + сколько с нулями на конце (ну и понятно, что для последнего числа не надо его 0 на конце считать) На самом деле надо посчитать числа вида , сколько среди них 1 и 2, ну и вычесть n, так как лидирующий 01 мы тоже посчитаем. Заметим, что yij для фиксированного j периодично с периодом 2j + 2. Так же заметим, что меняется оно не чаще, чем каждые 2j / a раз. Ну а значит в периоде у нас не более 4a изменений значения, значит их все можно посчитать. Мой код

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

      Похвастаюсь и тут, что у меня решение, которое я не успел додебагать на контесте, прошло в практис руме, и оно не использует то, что a маленькое.

      Сводим к стандартной задаче подсчета суммы целых частей (a*x+b)/c по x от 0 до n-1.

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

        А можно поподробнее, как к такой задаче свести?

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

          Добавить 2i и посчитать сумму, деленную на 2i + 1 минус удвоенную сумму, деленную на 2i + 2 (сумма целых частей имеется ввиду, конечно)

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

            Круто! Огромное спасибо, сдам в практис.)

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

Блин, надо было внимательнее читать комнату, всего 38 поинтов не хватило

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

что за геноцид по здаче А ? О_о

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

    Поддержу. Есть ли какая-нибудь типичная ошибка в задаче А, которая привела к такому обильному падению задач на систестах?

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

      Лонг-лонги может забыли?

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

        А зачем они там? О_о

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

          Если делать бинпоиск по ответу и смотреть, сколько очков мы можем набрать за K (1 <= K <= 10^9) раундов, то это число может не влазить в int (в первую очередь, промежуточные вычисления — понятно, что итоговое число нам и не нужно больше чем P, то есть int).

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

            Клёво, не додумался до такого решения.

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

            А тупая жадность разве не проще? И, кстати, там long long'и не нужны.

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

              Я додумался лишь до динамики, полагая, что жадность упадет.

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

А почему так мало человек участвует? Ведь прошло 2000, ну 50 прошли в следующий раунд, но в первом всего было порядка 1300, в этом 1212. Неужели все считают, что пройдут в последнем 2C?

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

    Ну может 1300 и 1212 в объединении дают что-то близкое к 2000? Некоторые (включая меня) не писали 2А в силу каких-то других дел, помимо олимпиад. Наверняка кто-то по той же причине не писал 2B. Но, думаю, людей которые ни в одном не поучаствуют будет мало.

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