Джон и Доу играют в игру. В игре им даются N ключей, причем N-1 клавиш покрыты латунью, а одна - посеребрена. P — это позиция посеребренной клавиши, которая является правильной.
Чтобы играть, Джон и Доу ходят по очереди, и в каждом ходу они должны выбирать последовательные клавиши M, которые должны включать серебряный ключ и поменяйте их порядок. Чтобы выиграть игру, нужно поместить посеребрённый ключ в положение X. Джон начинает игру.
Предположим, что Джон и Доу играют оптимально.
Примечание: индексация начинается с 1.
Выведите имя игрока, который выиграет. Выведите Draw, если игра закончилась вничью.
Код: Выделить всё
N = number of keys
P = position of the silver-plated key
M = Consecutive keys to be reversed
X = Winning position
Код: Выделить всё
each input range is from 1 to 10^6
Код: Выделить всё
N=3,P=1,M=2,X=2
Код: Выделить всё
John
Всего существует 3 ключа. Первый — посеребренный ключ. На каждом ходу игроки должны выбрать два последовательных ключа и поменять их порядок. Выигрышная позиция – 2. Джон начинает игру. Таким образом, он может просто выбрать первые два ключа и поменять их порядок. В этом ходу он сможет поставить серебряный ключ на выигрышную позицию. Итак, ответ: Джон
Пример 2:
Код: Выделить всё
N=4,P=1,M=2,X=4
Код: Выделить всё
Draw
- Всего 4 ключа. Первый — посеребренный ключ. На каждом ходу игроки должны выбрать два последовательных ключа и поменять их порядок. Выигрышная позиция — 4.
- Джон начинает игру. Таким образом, он может просто выбрать первые два ключа и поменять их порядок. Посеребренный ключ находится в положении 2.
- После этого Доу снова выберет первые 2 ключа, поменяв их местами, чтобы поместить посеребренный ключ в положение 1. С другой стороны, он мог бы поменять порядок 2-го и 3-го ключей, но на своем следующем ходу Джон сможет переместить посеребренный ключ из позиции 3 в позицию 4 и выиграть игру.
< li>В оптимальной игре предыдущие два хода выполняются бесконечно, поэтому ни Джон, ни Доу не смогут выиграть игру. Итак, напечатайте Draw.
Код: Выделить всё
public String solve(int N, int P, int M, int X) {
int[] ar = new int[N];
ar[P-1] = 1;
for(int i=0; i
Подробнее здесь: [url]https://stackoverflow.com/questions/77114160/find-winner-for-a-game[/url]
Мобильная версия