Python помогите пожалуйста
Задача C. Rectangle Merging
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Вам даны n прямоугольников. В первую секунду рассматривается только первый прямоугольник размера a1 × b1. Затем в i-ю секунду к текущему прямоугольнику присоединяется одной из
своих сторон без наложения прямоугольник размера ai × bi так, чтобы их объединение оставалось
прямоугольником.
Для этого текущий прямоугольник и прямоугольник размером ai × bi должны присоединяться
друг к другу одинаковой стороной. Прямоугольник мог быть повернут на 90◦ и присоединен к любой
из сторон текущего прямоугольника, если сам имел равную ей сторону.
По информации о размерах всех n прямоугольников определите, можно ли их всех в таком
порядке объединить, и если да, то какие прямоугольники могли получиться в конце.
Формат входных данных
В первой строке ввода дано единственное число n — количество прямоугольников (1 6 n 6 105
).
В i-й из следующих n строк через пробел даны два целых числа ai и bi — размеры i-го прямоугольника (1 6 ai
, bi 6 1012). Обратите внимание, что размеры прямоугольников могут не
помещаться в 32-битный целочисленный тип данных int.
Формат выходных данных
В первой строке выведите одно целое число k — количество возможных вариантов размеров
итогового прямоугольника. Если объединить их все не получится, считайте, что k = 0.
В i-й из следующих k строк выведите через пробел два числа — размеры итогового прямоугольника в i-м варианте.
Варианты можно выводить в любом порядке. На одной строке длину и ширину также можно
вывести в любом порядке.
Система оценки
Баллы за каждую подзадачу начисляются только в случае, если все тесты этой подзадачи и
необходимых подзадач успешно пройдены.
Подзадача Баллы Ограничения Необходимые подзадачи
0 – примеры из условия
1 17 n 6 2
2 13 ai = bi для всех i
3 19 n 6 3 1
4 22 ai и bi — степени двойки для всех i
5 29 нет 0 – 4
Страница 3 из 8
Innopolis Open 2023. Practice Round 2
Россия, Иннополис, 16 декабря 2023
def merge_rectangles(n, rectangles):
rectangles.sort(key=lambda x: max(x[0], x[1]), reverse=True)
result = []
merged = rectangles[0]
for i in range(1, n):
a, b = rectangles[i]
max_side = max(a, b)
if merged[0] >= max_side or merged[1] >= max_side:
merged = [max(merged[0], a), max(merged[1], b)]
else:
result.append(merged)
merged = [a, b]
result.append(merged)
return result
# Ввод данных
n = int(input())
rectangles = [list(map(int, input().split())) for _ in range(n)]
# Получение и вывод результата
result_rectangles = merge_rectangles(n, rectangles)
k = len(result_rectangles)
print(k)
for rect in result_rectangles:
print(rect[0], rect[1])