Городская стена: покраска без «перекоса»
Условие
В городе чинят старую кирпичную стену. Её разбили на прямоугольную сетку из m рядов и n колонок. Каждый кирпич нужно покрасить в один из двух цветов:
- B — тёмный (black)
- W — светлый (white)
Архитектор требует, чтобы в каждом квадратике 2×2 (то есть для любых соседних двух рядов и двух колонок) было ровно два кирпича цвета B и ровно два цвета W.
Возможных раскрасок может быть много, поэтому город просит вывести лексикографически минимальную среди всех подходящих: сравниваются строки по порядку, а если склеить все строки сверху вниз в одну длинную строку, она должна быть минимальной (считайте, что B < W).
Формат ввода
Два целых числа m и n.
Формат вывода
Выведите m строк по n символов в каждой — только B и W — так, чтобы выполнялось условие про каждый блок 2×2, и раскраска была лексикографически минимальной.
Ограничения
- 1 ≤ m ≤ 20
- 1 ≤ n ≤ 10
Пример
Ввод:
3 4
Вывод:
BBBB
WWWW
BBBBКак решать — идея подхода
Приём: Конструктив + жадный выбор по лексикографическому минимуму
Ключевое наблюдение: лексикографический минимум (при B < W) требует, чтобы как можно раньше стояли B. Значит, первая строка должна быть минимально возможной — это строка из одних B.
Почему это работает: если m >= 2 и n >= 2, то условие «в каждом 2×2 ровно 2 B и 2 W» жёстко фиксирует следующую строку. Посмотрим на любой блок 2×2, где верхние две клетки — B B. Чтобы всего было ровно две B, нижние две клетки обязаны быть W W. Это верно для каждой пары соседних столбцов, значит вторая строка целиком становится из W. Дальше аналогично: под строкой из W обязана идти строка из B, и так до конца.
План:
- Если
m == 1илиn == 1, ограничений на 2×2 нет → печатаем всеB. - Иначе:
- Печатаем строки по очереди: на чётных (0, 2, 4, …) —
Bповторитьnраз, на нечётных —Wповторитьnраз.
Сложность: O(m*n) на вывод.
Частая ошибка: забыть случай m == 1 или n == 1 и пытаться «вынуждать» вторую строку, хотя блоков 2×2 просто не существует.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами