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

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

Добрый день. Не мог бы кто-нибудь подсказать решение задачи G с neerc 2007. Заранее спасибо.

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

13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
По памяти - динамика по покрытым отрезкам + какое-то важное уточнение для того, чтобы сохранить обусловленность в дробях.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Как учесть, что можно бесконечно бегать внутри покрытого отрезка? Видимо, нужно уметь выражать динамику саму через себя, но не понятно как.
    • 13 лет назад, # ^ |
        Проголосовать: нравится +7 Проголосовать: не нравится

      Зафиксируем левую и правую границы LBord, RBord. Теперь для каждого человека посчитаем вероятность того, что, если он отдаст токен налево, токен вернётся к нему, не выйдя за левую границу. Обозначим для i-го человека эту вероятность Lret[i][LBord][RBord]. Обозначим вероятность отдать токен налево L[i], а направо - R[i]. Тогда там сумма бесконечной геометрической прогрессии:

      Lret[i][LBord][RBord] = R[i-1] / (1 - L[i-1] * Lret[i-1][LBord][RBord])

      Для крайнего слева Lret[LBord][LBord][RBord] = 0. Для остальных хорошо считается динамикой слева направо.

      Аналогично введём Rret[i][LBord][RBord]. Тогда вероятность для позиции, заданной левой границей, правой границей и положением токена перейти саму в себя равна:

      Pret[Token][LBord][RBord] = L[Token] * Lret[Token][LBord][RBord] + R[Token] * Rret[Token][LBord][RBord].

      Когда мы посчитаем эту вспомогательную динамику, начнём считать основную: она будет идти по отрезкам с фиксированными границами и токеном либо ровно на левой либо ровно на правой границе. Обозначим матрицу этой динамики P[B][LBord][RBord]. B = 0 для левой, B = 1 для правой.

      Тогда:

      P[1][LBord][RBord + 1] = P[1][LBord][RBord] * R[RBord] / (1 - Pret[RBord][LBord][RBord]) + P[0][LBord][RBord] * (1 - Pret[LBord][LBord][RBord])

      Вспомогательная динамика пройдёт за О(n^3). Основная - за О(n^2). Надеюсь, что нигде не лажанул.

      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Что-то в духе, только делить на (1-число) как раз просто так и нельзя. Будут проблемы с точностью. Дальше - либо с большой точностью считать, либо что-то можно нашаманить.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          В условии исходные вероятности от 0.01 до 0.99. Я так полагаю, что и в описанной динамике все числа будут в этих границах. А тогда точность не сыграет такой решающей роли.
13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
А мы просто матрицу в перехода в огромную степень возводили... там их три кажется... и брали нужные нам вероятности...