Найти в Дзене

Задача 530. Чёрно-белая графика

Школьные каникулы и карантин - самое время порешать задачки. Для разминки посмотрим на простую задачу с регионального этапа Всероссийской олимпиады школьников 2009 года: Длинное условие с разными пояснениями, но всё свелось к тому, что даны две таблицы из 0 и 1 и надо применить к ним бинарную функцию. Здесь думать нечего, надо сразу начинать писать решение. Ограничения на входные данные довольно сильные, поэтому можно писать на любом языке программирования. Предлагаю рассмотреть решение на языке Python. Первым делом считаем входные данные, точнее их часть - размеры таблиц и сами таблицы: Замечу, что нет никакой необходимости преобразовывать строки из входных данных в массив чисел, так как в этой задаче не предвидится никаких арифметических операций. Считывание двумерного массива с помощью генератора списка очень удобно и лаконично, советую использовать. А вот от того, в каком виде мы будем хранить логическую операцию, зависит удобство работы с ней и размер кода, который придётся написа

Школьные каникулы и карантин - самое время порешать задачки. Для разминки посмотрим на простую задачу с регионального этапа Всероссийской олимпиады школьников 2009 года:

Условие задачи с сайта acmp.ru
Условие задачи с сайта acmp.ru

Длинное условие с разными пояснениями, но всё свелось к тому, что даны две таблицы из 0 и 1 и надо применить к ним бинарную функцию.

Здесь думать нечего, надо сразу начинать писать решение. Ограничения на входные данные довольно сильные, поэтому можно писать на любом языке программирования. Предлагаю рассмотреть решение на языке Python.

Первым делом считаем входные данные, точнее их часть - размеры таблиц и сами таблицы:

Считывание входных таблиц
Считывание входных таблиц

Замечу, что нет никакой необходимости преобразовывать строки из входных данных в массив чисел, так как в этой задаче не предвидится никаких арифметических операций.

Считывание двумерного массива с помощью генератора списка очень удобно и лаконично, советую использовать.

А вот от того, в каком виде мы будем хранить логическую операцию, зависит удобство работы с ней и размер кода, который придётся написать. В этом случае удобнее всего будет воспользоваться словарём, потому что он по определению является отображением одних элементов в другие. А логическая операция - это отображение двух битов (в нашем варианте хранения - двух символов) в один результирующий.

В таком виде и считаем логическую операцию, указав в правильном порядке все пары символов:

Считывание логической операции
Считывание логической операции

Теперь, чтобы получить результат применения логической операции к двум битам, необходимо лишь соединить эти два бита в строку и посмотреть, что лежит в словаре под этим ключом.

Осталось применить функцию к каждой паре соответствующих битов из входных таблиц и вывести результат. Сделаем это за один проход по таблицам:

Обработка и вывод ответа
Обработка и вывод ответа

Первым циклом идём по строкам, вторым - по символам в строках, конкатенируем (соединяем) пару символов, смотрим, что лежит в d и выводим. Чтобы не было лишних пробелов используем end=''.

Предыдущий выпуск: Задачи 299, 304. Волейбол

Я очень хочу, чтобы мои советы были полезны вам, а для того, чтобы быстрее всех получать новые статьи можно подписаться на мой канал.