Это типичная проблема теории игр. Игроки играют оптимально, означает, что любой игрок сделает ход таким, чтобы он максимизировал его шанс выиграть (учитывая, что, когда игрок 2 получает шанс, он также будет готов сделать то же самое).
Теперь в этом случае давайте посмотрим, какие ходы допускаются:.
По мере необходимости красоту ряда должны оставаться таким же и k
должны иметь красоту 1
т.е. только 1 набор битов (напр 00000100
)
Для дополнительной иллюстрации предположим, что у нас есть только 8-битное число.
Если вы видите внимательно, за красоту N
оставаться же, бит установлен в k
находится в (один из) индекса, при котором N
имеет 0
и 1
находится слева рядом с ним. Приведу пример:
Скажем, N
- 01010001
. сейчас k может быть 00100000
, 00001000
. Если вы видите N-k
, красота остается такой же. После операции вы заметите, что 1
перемещается вправо и, следовательно, 0
перемещается влево. Например, когда N=01010001
и k=00100000
(N-k) = 00110001
.
Также конечная позиция игры будет такой, что все 0's
находятся слева, а все 1's
находятся справа (00000111
). Вы можете подсчитать количество возможных ходов с учетом номера N
. Если это нечетно, тогда игрок начинает выигрывать, иначе он проигрывает.
Теперь, чтобы подсчитать количество таких ходов, это простая проблема перечисления.
Дерево поиска игр http://en.wikipedia.org/wiki/Game_tree и двоичные перестановки http://en.wikipedia.org/wiki/Permutation – IdeaHat
Можете ли вы предоставить ссылку на проблему. Мне интересно решить эту проблему, если она была на сайте программирования. Спасибо. –
Нет, эта проблема не была на каком-либо сайте программирования. Фактически это вопрос интервью. – RKTSP