Лучше поздно чем никогда
Сегодня, 30 ноября, состоялся очередной СРМ
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 156 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Название |
---|
Скорее всего венгерский алгоритм (ну или парасочетание с помощью минкоста).
Каждой фигуре из начального состояния соответствует какая-то фигура из конечного. таким образом для каждой пары фигур можно определить сколько понадобится ходов для перехода.
А что делать, когда все кони уже стоят на своих местах, но их надо подвинуть, чтобы пропустить пешку?
Пример 1:
...
.N.
.P.
---
.P..
.N.
...
Пример 2:
..P.P..
.P...P.
...N...
.P.P.P.
..P.N..
.......
-------
..P.P..
.P.P.P.
...N...
.P...P.
..P.N..
.......
Я вот тоже думаю как решать. Оценка сверху количества позиций не такая и хорошая:
Но может решение и есть простой бфс, это же див2 всё-таки.
Параметры: номер обрабатываемой вершинки, текущая сумма длин внутри объединенных вершин, текущее количество объединенных вершин.
Отсортируем деревья по возрастанию r.
Представим что перестановка это такой граф-цикл из N+1 вершины. Чтобы получить по графу перестановку надо разрезать цикл по N+1-ой вершинке. Вес ребра i-j в графе это rmax(i, j)
Представим себе следующий разрез: вершины с 1 по i в одной части, i + 1 по N в другой. Пусть через этот разрез проходит s пар рёбер. Будем считать число вариантов соединений в левой части разреза.
Три параметра: i - текущая вершинка которую мы переносим через разрез, s - сколько пар рёбер есть в разрезе (проходит из одной части в другую), w - текущая длина перестановки, если учесть все рёбра между вершинами 1..(i - 1).
Значение - количество графов оказывающихся в "левой" части разреза.
Внутри надо перебрать сколько рёбер ведёт из вершины i налево, а сколько направо. Варианты:
2-0 : таких вариантов s * (s - 1) * 2, при этом s надо уменьшать на 1. Вес увеличивается на 2ri
1-1 : таких вариантов ровно s, при этом s не меняется. Вес увеличивается на ri
0-2 : вариант один, s увеличивается на 1.