🐍🧩 Обработка вложенных списков и матриц в Python: 5 задач с решениями для совершенствования навыков
Вычисляем площадь незакрашенного холста, определяем максимальный элемент в области, заполняем массив по диагоналям, складываем две матрицы и находим нужную строку в треугольнике Паскаля.
Картина
После окончания работы над очередным шедевром кубизма художник решил определить, какая площадь холста осталась незакрашенной. Холст имеет прямоугольную форму; изображение состоит из n прямоугольников, расположенных в целочисленных координатах, параллельно сторонам холста. Напишите программу, которая принимает ширину и высоту холста, а также количество нарисованных на холсте прямоугольников n, и определяет незакрашенную площадь холста.
Формат ввода
В первой строке подаются высота и ширина холста – натуральные числа w и h (1 ≤ w, h ≤ 100); во второй – целое число n, количество прямоугольников (0 ≤ n ≤ 5000). Затем программа получает n строк с координатами левого верхнего и правого нижнего углов прямоугольников – x1, y1, x2, y2.
Формат вывода
Целое число – площадь незакрашенной поверхности холста.
Примеры ввода и вывода
Ввод #1:
Вывод #1:
Ввод #2:
Вывод #2:
Решение
Это олимпиадная задача: чтобы решение было засчитано как правильное, код должен удовлетворять жестким требованиям – выполняться не более чем за 1 секунду, и использовать не более 16 Мб памяти. По этой причине эффективно решить эту задачу на Питоне очень сложно: решение «в лоб» на массиве максимального размера исполняется за 1,8-2 секунды, а решение с использованием множеств превышает лимит памяти.
Поскольку поэлементное обновление большого массива в Python происходит слишком медленно, эффективное решение заключается в обновлении массива «кусками»:
На массиве максимального размера (при n = 5000) этот код выполняется за 0,703 секунды.
Заполнение матрицы по диагоналям
Напишите программу, которая принимает два натуральных числа n и m, создает матрицу размером n × m, и заполняет ее по диагоналям, направленным справа-сверху влево-вниз.
Формат ввода
Строка с числами n и m, разделенными пробелом.
Формат вывода
Матрица, заполненная в соответствии с условием задачи.
Пример ввода и вывода
Ввод #1:
Вывод #1:
Решение
Способ 1:
Способ 2:
Способ 3:
Максимальный элемент в области
Напишите программу, которая выводит максимальный элемент в заштрихованной области квадратной матрицы.
Формат ввода
В первой строке подается число n – количество строк. Затем программа получает n строк с элементами матрицы.
Формат вывода
Максимальный элемент из заштрихованной области матрицы.
Пример ввода и вывода
Ввод:
Вывод:
Решение
Способ 1:
Способ 2:
Способ 3:
Сложение матриц
Напишите программу для вычисления суммы двух матриц.
Формат ввода
Программа получает два натуральных числа n и m — количество строк и столбцов в матрицах, далее подаются элементы первой матрицы, после которых следует пустая строка, а затем – элементы второй матрицы.
Формат вывода
Программа должна вывести результирующую матрицу, разделяя элементы символом пробела.
Пример ввода и вывода
Ввод:
Вывод:
Решение
Способ 1:
Способ 2:
Способ 3:
Строка из треугольника Паскаля
Напишите программу, которая получает на вход число n, и возвращает n-ую строку из треугольника Паскаля в виде списка. Нумерация строк начинается с 0.
Пример ввода и вывода
Ввод:
Вывод:
Решение
Способ 1:
Способ 2:
Способ 3:
Способ 4:
Способ 5:
Материалы по теме
- 🐍 Словари в Python: 12 задач для начинающих с решениями
- 🐍 5 задач с решениями на Python для начинающих разработчиков
- 🐍 5 классических задач по Python для начинающих с решениями