Тема: задачка з олімпіади
UI
Доброго дня.
Прошу допомогти мені розв'язати мені задачку з вчорашньої олімпіаду.
Вчора я не встиг її доробити, але ради цікавості - доробив сьогодні.
Але є одна проблема - я розумію, що при певних тестах мій розв'язок не пройде.
Умова на фотографії (вибачте за якість, в кращій ніяк не можу загрузити).
Ось мій код:
import math
out = [] # масив для виводу
n = int(input())
arr = list(map(int, input().split()))
for i in range(n * 2 - 1): # кількість команд - 1 (бо далі ми будемо перевіряти даний і наступний елемент масиву, отже, останній не потрібно)
if arr[i] == arr[i + 1]: # якщо даний елемент = наступному
out.append(i + 1) # то добавляємо його порядковий номер ( + 1, бо потрібно, щоб був відлік від 1) в масив для виводу
print(math.ceil(len(out) / 2)) # рахує кількість хвилин (перестановок) по кількості елементів масиву і виводить
for i in range(1, math.ceil(len(out) / 2) + 1): # виконуємо цикл по кількості перестановок, але з відліком від одного (тому, що далі у нас буде спосіб обчислення порядкового номеру масиву неприйнчтний для 0)
try:
print(str(out[i * 2 - 2]) + " " + str(out[i * 2 - 1])) # якщо є 2 команди, то міняємо їх місцями
except:
print(str(out[i * 2 - 2]) + " 1") # якщо залишилась лише 1 команда то міняємо її з 1шою
Розумію, код сильно заплутаний і мабуть є набагато простіший спосіб це зробити, але тому я сюди і пишу - щоб ви мені допомогли.
На рахунок тестів, які він не пройде - ось приклад:
Вхідні дані:
2
1 1 2 2
Вихідні:
1
1 3
Тобто, якщо у тест-кейсі буде іти підряд 2 пари одинакових чисел, які потрібно переставити місцями - тест провалиться.
А ще коли потрібно буде переставити місцями перший елемент масиву і, потім, після всіх перестановок залишиться якийсь один елемент, який потрібно буде переставити і він по замовчуванні буде переставлений з 1м