Ctrl K

Партнёры рядом

Сложная
На банкете гости сидят в один ряд, стулья разбиты на соседние пары: стулья 0 и 1, стулья 2 и 3 и так далее. Каждый гость пришёл с партнёром: гости 0 и 1 — пара, 2 и 3 — пара, и так до последних двух номеров. Массив seats описывает рассадку: seats[i] — номер гостя на стуле i. За один обмен любые два гостя меняются стульями. Верните наименьшее число обменов, после которого каждая пара гостей занимает одну пару соседних стульев (2j и 2j + 1).
Пример 1
seats=[1, 3, 0, 2] → 1

Пары за столом: (1, 3) и (0, 2). Меняем местами гостей 3 и 0 — получаем (1, 0) и (3, 2), обе пары вместе. Хватает одного обмена.

Пример 2
seats=[5, 4, 2, 3, 1, 0] → 0

Все партнёры уже сидят рядом, менять ничего не нужно.

Пример 3
seats=[0, 2, 4, 1, 3, 5] → 2

Пары (0, 2), (4, 1) и (3, 5) перепутаны по кругу: одного обмена мало, нужно два.

Ограничения
  • 2 ≤ len(seats) ≤ 10⁵, длина чётная
  • seats — перестановка чисел от 0 до len(seats) − 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЛишняя связь в дереве с корнем СложнаяКого вылечить первым СложнаяКого отключить от сети СложнаяНовость по цепочке звонков СложнаяРасстояния до кольцевой Сложная
загружаем Python…
Вход
seats=[1, 3, 0, 2]
Ожидается
1

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 82 теста на сервере, включая скрытые.