Расположение N шахматных ладей на N×N шахматной доске, так чтобы они не били друг друга, т.е. чтобы на каждой вертикали

  • 67
Расположение N шахматных ладей на N×N шахматной доске, так чтобы они не били друг друга, т.е. чтобы на каждой вертикали и горизонтали была только одна ладья. После поворота шахматной доски по часовой стрелке, выведите новое расположение ладей. Входные данные содержат целое число N, 1≤N≤105 - размер доски. Следующие N строк содержат по одному числу от 1 до N, а именно, в i-й строке записано число ai - номер вертикали, где находится ладья на i-й горизонтали. Задача решается, где горизонтали пронумерованы числами от 1 до N сверху вниз, а вертикали пронумерованы числами от 1
Kosmicheskaya_Panda
30
Для решения данной задачи о расположении шахматных ладей на шахматной доске без возможности бития друг друга, нам потребуется использовать алгоритм. Прежде всего, рассмотрим алгоритм для расположения ладей без поворота доски.

Давайте создадим два массива: "gorizontal" и "vertical". В массиве "gorizontal" будем хранить информацию о расположении ладей на каждой горизонтали, а в массиве "vertical" - о расположении ладей на каждой вертикали.

Начнем с того, что заполним массивы "gorizontal" и "vertical" значениями от 1 до N в соответствии с начальным расположением ладей. Затем проверим, есть ли повторяющиеся значения в массивах "gorizontal" и "vertical". Если такие значения есть, то расстановка ладей на шахматной доске не является правильной. В таком случае, выведем сообщение об ошибке. Если повторений нет, то можем приступить к повороту доски.

Для поворота доски по часовой стрелке, мы поменяем местами значения массива "gorizontal" с массивом "vertical" и инвертируем значения массива "vertical". Теперь в массиве "gorizontal" будут храниться значения вертикалей, а в массиве "vertical" - значения горизонталей с инвертированными порядками.

Наконец, выведем новое расположение ладей в соответствии с измененными массивами "gorizontal" и "vertical".

Вот пример реализации данного алгоритма на языке Python:

python
N = int(input()) # Вводим размер доски
gorizontal = [] # Массив для горизонталей
vertical = [] # Массив для вертикалей

# Заполняем массивы значениями из входных данных
for i in range(N):
gorizontal.append(i + 1)
vertical.append(int(input()))

# Проверяем наличие повторяющихся значений
if len(set(gorizontal)) != N or len(set(vertical)) != N:
print("Ладьи не могут находиться на одной вертикали или горизонтали.")
else:
# Поворачиваем доску
gorizontal, vertical = vertical, gorizontal[::-1]

# Выводим новое расположение ладей
for i in range(N):
print(gorizontal[i], vertical[i])


Этот код позволит получить новое расположение ладей после поворота доски по часовой стрелке.