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

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

Салют! В преддверии заключительного этапа хотелось бы понять, как решаются некоторые из задач предыдущего года. Не могли бы вы в двух словах раскрыть идею задачи A и B?

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

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

Первая идея задачи A — нас интересует только 30 человек

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

    А почему именно 30..?

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

      Берем 10ки лучших нападающих, защитников и полузащитников. Несложно доказать, что если мы возьмем в команду кого-то не из десятки, то можно будет заменить его кем-то из десятки и улучшить ответ. Значит нас интересуют только 30 человек. На них делаем переборчик.

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

Идея, которую не помню/не понимаю, как доделывать, но помню, что говорили на разборе: Считаем, что отрезок длины N проходит на расстоянии N от полоски. Это ничему не мешает.

UPD: вроде доделывается, если идти слева направо и с ДО (установить на отрезке, взять число на отрезке) и искать минимальное противоречие, где противоречие это номер пересекающихся отрезков.

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

Вторая задача решается бин-поиском по ответу.

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

    Вы проверку за линию будете делать? Как? Или думаете nlog^2 засунуть?

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

      Ну вроде бы верно: считаем первоначально все дорожки отдельно в верху и в низу, затем отсортируем их концы. Каждый раз при проверке некоторого числа микроконтроллеров X добавляем в стек те начала или концы, которые указывают на микроконтроллеры с номерами <= X. Ну и за линию узнаем правильная ли эта скобочная последовательность.

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

А как решается С?

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

    Вроде бы динамика, минимум/максимум (они просто противоложны) значения на прямоугольнике (1,1) — (r, c). Пересчет примерно такой:

    dp[i][j] = max(dp[i — 1][j] + s[i][1...j], -(-dp[i — 1][j] + s[i][1..j]), dp[i][j — 1] + s[1...i][j], -(-dp[i — 1][j] + s[1...i][j]))

    (Причем, видно, что его можно упростить.)
    s — префиксные суммы.
    + Надо хранить предков и флаг, нужно ли было менять в этом многоугольнике.