Привет. Задача про игра. Есть N x M прямоугольник. Первый игрок

выберает любая координата (x, y), и вырезает эту строку и столбцу в прямоуголник.

Второй игрок выберает оставшийся любой из прямугольник и повторяет действие, то есть выберает любая координата (x,y) в этом прямуголника и вырезает x-строку, и y-столбцу.

и так далее.

Тот кто не может выбрать прямугольник, то есть для него не останется прямугольник — тот проиграет.

EDIT: надо определить кто выигривает, если оба игрог оптимально играет.


Незнаете как это моделировать независимо для каждой полученный прямоугольника?

Например, если N = 4, M = 4 — то второй игрок всегда выигривает не зависимо как первый игрок первый шаг делает.

Был какие то формулы про XOR операций.

Например, N = 4 , M = 4 и Первый Игрок x = 2, y = 2 выберается, , получаем 4 прямугольника: 1x1 2x1 1x2 2x2 — можно как то для каждого маленького прямугольника вычислят результат независимо и их объеденить?

3 ответов

30 просмотров

https://e-maxx.ru/algo/sprague_grundy

Khurshid- Автор вопроса
Evgenii Zheltonozhskii🇮🇱
https://e-maxx.ru/algo/sprague_grundy

Помогло, только решение стало O((N*M)^2), не могу оптимизироваться int nims[1+N][1+M] = { 0 } for A = 1..N for B = 1..M mex = [] for iA = 1..(A+1)/2 for iB = 1..(B+1)/2 xor_sum = nims[ iA-1][iB-1] xor nims[ iA-1][B - iB] xor nims[A-iA][iB - 1] xor nims[A-iA][B - iB]; mex [xor_sum ] = true; nim_A_B = 0; while mex[ nim_A_B] == True: ++nim_A_B nims[A][B] = nim_A_B; if nims[N][M] == 0: lost else win

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта