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

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

Привет всем!!! Сегодня состоится командная олимпиада на сайте Neerc. Всем удачи!!! будем надеяться, что разбор напишет кто-нибудь.

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

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

можешь назвать пост как-нибудь поконкретнее, а то neerc 2012-2013 понятие растяжимое

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

можете сказать где находятся задачи?

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

У кого нибудь есть условие?

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

как решать G ?

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

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

    P.s. в контесте не участвовал, решение не сдавал, так что могу ошибаться.

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

Как решать D?

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

    мы искали поток в сети, где в первом слое — дни, во втором — типы таблеток. в каждый день ведет единичное ребро из истока, и из каждого дня исходят два единичных ребра в соответствующие типы таблеток. из j-того типа таблеток выходит ребро в сток с пропускной способностью cj. утверждается, что если решение есть, ответ — насыщенные ребра между долями.

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

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

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

        гм. казалось бы, ребер тогда может получиться квадрат от числа вершин. O(VE) не должен был проходить, или я чего-то не осознал?

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

          да нет, по идее это тоже проходит, ведь если хоть раз и первой доли не нашлась удлиняющая цепь — можно брякнуться

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

В некоторых задачах были неточные условия. Например в задаче G не было понятно что делать с людьми, живущими на той площади, на которой будет построена больница. Также в последней задаче не было сказано в какую сторону делается циклический сдвиг: вправо или влево. Мне кажется, что мое решение не прошло из-за того, что я думал что используется сдвиг налево, а они подразумевали направо.

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

    А какая разница, в какую сторону сдвиг? Там же рассматриваются все сдвиги.

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

    Надо было смотреть Messenger. Там были уточнения по задачам A и G.

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

А как решалась J?

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

    Найдём в строке наибольшую amax и наименьшую amin букву. Тогда сложность слова = max(amax-s[0],s[0]-amin) + max(amax-s[n-1],s[n-1]-amin). При циклическом сдвиге крайними буквами становятся все пары соседних. Переберём все такие пары в качестве s[0] и s[n-1] и посчитаем среди них минимум — ответ.

    P.s. в контесте не участвовал, решение не сдавал, так что могу ошибаться.

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

      нет. надо еще найти, минимальный циклический сдвиг, который будет равен строке — смотрите семпл из примера

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

        Действительно. А как это сделать? Разложить длину строки на простые и просто проверить?

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

          период строки = n — p[n], если n % (n — p[n]) == 0

          и n если n % (n — p[n]) != 0, где p[n] — префикс-функиция для n-го элемента

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

Кто-нибудь сможет залить в тренировки, когда выложат тесты?

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

    можно скачать и протестировать самому, если вы конечно хотите дорешать (а не решать впервые)

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

Как решалась H?

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

    Есть мнение, что динамика за квадрат. Будем поддерживать массив dp[N] — наименьшее число пересадок, за которое можно успеть в данный город, av[N] — массив, отмечающий достижимость города до отправки конвоя. Так же будем хранить числа a и t — наименьшее число пересадок и наименьшее время, когда мы можем добраться до спасительного города. Для каждого города i выполняем следующие действия: если город недостижим до отправки конвоя, то пропускаем его. Если же достижим, то обновляем (если надо) a,t, отмечаем все города, в которые мы можем успеть, как достижимые и обновляем в них наименьшее число пересадок как dp[j] = min(dp[j],dp[i]+1). В итоге в a и t получаем ответ.

    P.s. в контесте не участвовал, решение не сдавал, так что могу ошибаться.

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

Тесты выложили, залить в тренировки было бы очень кстати.

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

    можно тесты скачать и протестить, ага

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

      было бы клево, если бы все-таки залили на кодфорсес.

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

кому-нибудь известно, Анастасия Лешина aka Anastasiy — это реальный человек (кто-нибудь из здесь пристуствующих знает ее) или это чей-то фэйк?

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

    Реальный человек. Она раньше математикой занималась довольно серьезно.