Как следует из названия, эта проблема наполовину вдохновлена вежливым близоруким пьяным ботом @NP
Наш бедный бот помещается на декартовой сетке в начале координат, и через каждую минуту он перемещается на 1 единицу в одном из четырех направлений (вверх, вниз, влево, вправо).
Через n минут все скрытые мины в сетке активируются, убивая любого плохого бота, который может оказаться над ними. Мины расположены во всех целочисленных координатах, удовлетворяющих уравнению | y | = | x |.
Вызов
Вам будет предоставлено n , количество минут до взрыва мины, в качестве входных данных и выходных данных вы должны найти вероятность того, что бот мертв .
Ввод : натуральное число, представляющее n .
Вывод : Пусть вероятность того, что бот мертв, будет p / q, где p и q - относительно простые целые числа (q не может быть 0, но p может). Выход р.
правила
- Ваш алгоритм не должен работать в экспоненциальном или более высоком времени. В идеале он должен работать за полиномиальное время или меньше.
- Ваш алгоритм должен быть способен обрабатывать входные данные
n
<20 (могут быть скорректированы, если слишком сложно) в разумные сроки. - Это вызов для игры в гольф .
- Перебор всех возможностей для данного n будет определенно не принят в качестве ответа.
Тестовые случаи
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
Пример расчета для n = 6
У нас есть 4 возможных хода: U, D, R и L. Общее количество путей, которое можно было бы выбрать, составляет 4 ^ 6 или 4096. Есть 4 возможных случая, которые приземляются вдоль линии y = x: x, y = ± 1; х, у = ± 2; х, у = ± 3; или x = y = 0. Мы посчитаем количество способов попасть в (1,1), (2,2) и (3,3), умножим их на 4, чтобы учесть другие квадранты, и добавим это количество способов в конечном итоге в (0,0).
Случай 1: бот заканчивается в (3, 3). Чтобы бот оказался здесь, у него должно было быть 3 правильных хода и 3 хода вверх. Другими словами, общее количество способов попасть сюда - это способы перестановки букв в последовательности RRRUUU, в которой 6 выбирают 3 = 20.
Случай 2: бот заканчивается в (2,2). Чтобы бот оказался здесь, у него могло быть 2 хода вверх, 3 хода вправо и 1 ход слева; или 2 правильных движения, 3 движения вверх и 1 движение вниз. Таким образом, общее количество способов получить здесь является суммой способов перестановки букв в последовательностях RRRLUU и UUUDRR, обе из которых (6 выбирают 1) * (5 выбирают 2) = 60, всего 120 возможностей ,
Случай 3: бот заканчивается в (1,1). Чтобы бот оказался здесь, у него могли быть: 1 правильный ход, 3 хода вверх и 2 хода вниз. В этом случае количество способов перестановки букв в последовательности RUUUDD составляет (6 выберите 1) * (5 выберите 2) = 60.
1 ход вверх, 3 движения вправо и 2 движения влево. В этом случае количество способов перестановки букв в последовательности URRRLL составляет (6 выберите 1) * (5 выберите 2) = 60.
2 движения вправо, 1 движение влево, 2 движения вверх и 1 движение вниз. В этом случае количество способов перестановки букв в последовательности UUDRRL составляет (6 выберите 1) * (5 выберите 1) * (4 выберите 2) = 180.
Таким образом, общее количество способов попасть в (1,1) составляет 300.
Случай 4: бот заканчивается в (0,0). Чтобы бот оказался здесь, он мог иметь:
3 правых хода и 3 левых хода. В этом случае количество способов перестановки букв в последовательности RRRLLL составляет (6 выберите 3) = 20.
3 ходов вверх и 3 ходов вниз. В этом случае количество способов перестановки букв в последовательности UUUDDD составляет (6 выберите 3) = 20.
1 движение вправо, 1 движение влево, 2 движения вверх и 2 движения вниз. В этом случае количество способов перестановки букв в последовательности RLUUDD составляет (6 выберите 1) * (5 выберите 1) * (4 выберите 2) = 180.
1 движение вверх, 1 движение вниз, 2 движения вправо и 2 движения влево. В этом случае количество способов перестановки букв в последовательности RRLLUD составляет (6 выберите 1) * (5 выберите 1) * (4 выберите 2) = 180.
Таким образом, общее количество способов попасть в (0,0) составляет 400.
Сложив эти случаи вместе, мы получим, что общее число способов попасть в | y | = | х | 4 (20 + 120 + 300) + 400 = 2160. Таким образом, наша вероятность составляет 2160/4096. Когда эта доля полностью уменьшена, это 135/256, поэтому наш ответ 135 .