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

Автор Egor, 14 лет назад, По-русски
...состоится 16 апреля в 20:00 МСК
  • Проголосовать: нравится
  • +16
  • Проголосовать: не нравится

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

Удобное время проведения матча - похоже, что сегодня будет лимит регистраций.

За 40 минут до конца - уже 1733.

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Как решать 500 D1? Никак не пойму.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Можно для каждой вершины посчитать мат. ожидание дороги исходящей из неё (аккуратно считая вероятности (что я увы не смог)). И утверждается, что если просуммировать всё это, то получим ответ. Вроде бы вот так.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Отдельно посчитаем матожидание длины входящего ребра для каждой вершины. Отсортируем все расстояния до других деревень, а так же добавим расстояние до самого близкого города. Будем перебирать расстояния до других деревень в порядке возрастания. При этом будем хранить "оставшуюся" вероятность. Если до очередной деревни расстояние больше, чем до города - то добавляем к ответу это расстояние помноженное на оставшуюся вероятность. Теперь нам надо понять, какова вероятность того, что очередную деревню мы добавим раньше данной при том, что все предидущее деревни добавим после. Это равно вероятности того, кто случайная величина будет меньше первой из (i + 1) порядковой статистики. Это 1 / (i + 2). Добавляем с весом текущая вероятность на эту вероятность наше ребро и вычитаем вес из "оставшейся" вероятности
    • 14 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

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

      У меня были параметры DP(pos, flag_a, flag_b, bad_villages, usual_villages). pos -- текущая позиция в перестановке, flag_a - поставлена ли очередная деревня, flag_b -- поставленна ли данная (обрабатываемая) деревня, bad_villages -- сколько деревень должно быть еще поставлено из тех, которые должны стоять строго дальше обрабатываемой, usual_vilages -- кол-во деревень которые надо поставить и которые ни как не влияют на рассчет вероятности.

      Естественно порядок надо соблюдать порядок расстановки ))

    • 14 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится
      Как это согласуется с тем что, расстояния до нескольких деревень могут быть одинаковыми?
  • 14 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +8 Проголосовать: не нравится

    Для каждой деревни посчитаем матожидание расстояния дороги, идущей из нее. Ясно, что идти она будет в ближайший к ней город или в деревню, которые еще ближе этого города. Найдем все такие деревни, пусть их n - 1(с нашей n), занумеруем их от 1 до n в порядке увеличения расстояния (n будет значить, что дорога пойдет в город).

    Теперь надо посчитать вероятность, что дорога пойдет именно в какую-то из них. Если она пойдет в k-ую из них, то посмотрим в каком порядке первые k деревень плюс n-ая будут соединяться. Всего вариантов (k + 1)!, хороших из них (k - 1)!(когда идет сначала k-ая, потом наша, потом остальные в любом порядке), т. е. соответствующая вероятность Вероятность того, что дорога пойдет в город очевидно равна 1 / k 


    Кстати получилось еще одно доказательство того, что

14 лет назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится
У меня секунд за 20 до конца заработал 3-й сэмпл. Посубмитил секунд за 10 до конца. Прошла :) Но у меня решение через такую комбинаторику, что лучше понять решение кого-то в топе.
14 лет назад, # |
  Проголосовать: нравится +29 Проголосовать: не нравится
Без Петра решать 1000 некому =)
14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Ответ = сумма по всем перестановкам деревень ((1 / n!) * сумма расстояний вычисляемых по условию). Вынесем (1 / n!) в этой сумме за знак суммы и поменяем порядок суммирования. Эту сумму уже проще посчитать. Переберём деревню и посчитаем сумму которую она внесёт в общую. Для этого переберём все расстояния с которыми текущая деревня может войти в ответ и прибавляем это расстояние умноженное на колво перестановок в которые текущая деревня может войти с таким расстоянием (это колво считается простой комбинаторикой).
14 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится
Блин я полный идиот решил вторую и написал в первой n вместо m(( 
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Хе, а я в 250 сначала написал штуки три неправильные (!) жадности, потом плюнул и написал динамику, потом ещё в десяти строчках баги выправлял. В итоге потратил на неё времени больше, чем на 500.
14 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Да уж, в очередной раз понял, что меня от топа отделяют еще годы тренировок. 

Сегодняшнюю 250 я уже видел, так что я точно знал правильное решение... Тем не менее, пока я дочитал условие и понял, что это именно то, что я уже когда-то решал, а после этого описал класс и метод решения, некоторые (Egor, к примеру) уже задачу сдали.

А пока я еще и написал решение, перечитал его раз и проверил на примерах и сдал, то оказался по времени на этой задаче только 27ым...

Тем не менее, "я еще только учусь", так что не все так плохо; а автору + за задачу:) 

Пойду разбираться с решением 500, на контесте у меня на нее получились только комбинаторика настолько неудобная, что я в ней запутался, и очевидное решение за 2^N.


14 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится
Кстати, поздравляем Egor'a с возвращением статуса таргета =)
14 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится
Самое обидное - это неправильно прочитать условие 250 и считать, что числа могут быть одинаковые)
  • 14 лет назад, # ^ |
      Проголосовать: нравится -6 Проголосовать: не нравится
    А можете описать такой подход к решению 250, при котором такое понимание условия может привести к неправильному решению? В моем решении "разбором случаев", и в решении динамикой (которое некоторые писали) оно только ставит дополнительные условия, которые никаким образом не делают другим правильный ответ для тех тестов, которые возможны на самом деле.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А 500 без мат.ожидания никак нельзя было решить?
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Опять подвело знание английского...