Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
24 / 5 / 0
Регистрация: 20.09.2018
Сообщений: 310

На какое наименьшее число прямоугольников можно расчертить лист

21.06.2019, 15:48. Показов 4021. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перед Женей лежит белый лист размера N х М клеток. Часть клеток Женя закрасила синим, а оставшуюся часть она хочет расчертить на прямоугольники. Прямоугольник должен содержать только белые клетки, грани прямоугольника проходят по граням клеток. На какое наименьшее число прямоугольников она может расчертить свой лист?
Первая строка содержит N>=1 и М<=12. Следующие N строк содержат
no M чисел в каждой: 1 если клетка синяя, 0 если белая
Вывести одно число: минимальное число прямоугольников.

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





Мое решение выглядит как-то так:
Python
1
2
3
4
5
6
7
8
9
N = int(iput())
M = int(iput())
sroki = range(N)
for i in sroki:
    x = int(input()) // ввод значения 0 или 1
prg = 0 //начально число прямоугоьников
if x[i]=x[i+1]:
    prg +=1
print(prg)
Но как вводить именно для каждой строки M раз значения x я не знаю. Помогите, пожалуйста, исправить. Заранее большое спасибо_))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2019, 15:48
Ответы с готовыми решениями:

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

Какое наименьшее число Z можно получить вставкой цифры X в четырёхзначное число Y
Какое наименьшее число Z можно получить вставкой цифры X в четырёхзначное число Y. Ведущие нули не допустимы. Формат ввода: X Y ...

Определить, за какое наименьшее количество вопросов можно угадать задуманное число
Помогите пожалуйста. Некто загадал число от 1 до N. За какое наименьшее количество вопросов (на которые он отвечает &quot;да&quot; или...

12
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.06.2019, 16:24
Одну клетку считать, почему нет?
Задача не такая простая, как вам кажется. На сколько прямоугольников ваш алгоритм разобьёт следующую фигуру?
Code
1
2
3
. X .
X X X
X X X
Правильный ответ - 2.

Добавлено через 4 минуты
Похоже, решается жадным алгоритмом.
0
 Аватар для Semen-Semenich
5228 / 3474 / 1174
Регистрация: 21.03.2016
Сообщений: 8,301
21.06.2019, 16:32
Цитата Сообщение от dondublon Посмотреть сообщение
Правильный ответ - 2.
а по мне так 3 если брать по вертикали то первый прямоугольник это 2 икса первого столбика потом 3 второго и опять 2 третьего. не сказано же что прямоугольники должны быть равны
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.06.2019, 17:13
Semen-Semenich, надо ж наименьшее число.
Тогда два - верхний 1*1 и нижний 3*2.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.06.2019, 18:23
Python
1
2
3
4
5
6
7
8
9
n, m = input().split(' ')
n = int(n)
m = int(m)
 
arr = []
for _ in range(n):
    arr.append(input().split(' '))
 
print(arr)
Code
1
2
3
4
2 3
1 0 1
1 0 1
[['1', '0', '1'], ['1', '0', '1']]
1
 Аватар для Semen-Semenich
5228 / 3474 / 1174
Регистрация: 21.03.2016
Сообщений: 8,301
21.06.2019, 18:33
dondublon, упустил что наименьшее количество
Цитата Сообщение от dondublon Посмотреть сообщение
Тогда два - верхний 1*1 и нижний 3*2
ну 1*1 это клетка квадрат а не прямоугольник. тогда один, откинув верхний не закрашенный квадрат
.х.
и оставив один большой прямоугольник 3*2
ххх
ххх
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.06.2019, 18:45
Semen-Semenich, 1*1 - это маленький прямоугольник. Квадрат, кстати, тоже прямоугольник
Откидывать его мы не имеем права, это минус один прямоугольник получается.
0
24 / 5 / 0
Регистрация: 20.09.2018
Сообщений: 310
21.06.2019, 20:28  [ТС]
а можно тогда реализовать алгоритм следующим образом:
1) проверять все соседние четыре квадрата, если данный квадрат находится не у края
Python
1
2
if x [i,j]==x[i+1,j] or x [i,j]==x[i,j+1] or x [i,j]==x[i-1,j] or x [i,j]==x[i,j-1] :
     prg +=1
2) если у края, то использовать другой подход

При этом надо как-то соотнести m и n с i и j
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
24.06.2019, 11:07
catauggie, думаю, проверять соседние 4 смысла нет.
Жадный алгоритм (посмотрите, что это).
Идём сверху вниз и слева направо. Это не строго, просто для определённости.
Берём верхние точки нашей фигуры, их них - левую.
От этой точки идём вправо, пока можем (т.е. пока непрерывный ряд точек не закончится). Получили верхнюю сторону прямоугольника.
Теперь идём вниз этой стороной, тоже пока можем. Тут чуток сложнее, т. к. надо просмотреть все точки в ряду, а не одну.
Как упёрлись - всё, получили очередной прямоугольник, его "вычитаем" из фигуры. Кстати, делить всё изображение на фигуры необязательно.
Ну и всё, повторяем, пока есть нерассмотреные точки.
Если есть возможность - используйте numpy, будет меньше кода.
0
24 / 5 / 0
Регистрация: 20.09.2018
Сообщений: 310
24.06.2019, 17:08  [ТС]
dondublon , а как это реализовать в Python? Про жадный алгоритм я слышал, но как применить на практике не знаю.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
24.06.2019, 17:26
Что именно реализовать? Всю программу? Я редко пишу готовые программы.
Алгоритм-то понятен? Могу сделать поясняющий рисунок, если нет.
Давайте вы начнёте, будут какие-то конкретные вопросы - спрашивайте.
0
24 / 5 / 0
Регистрация: 20.09.2018
Сообщений: 310
24.06.2019, 20:04  [ТС]
я просто не знаю как написать жадный алгоритм на питоне. если бы какие-нибудь материалы понятные прочесть
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
25.06.2019, 10:11
catauggie, жадный алгоритм - это не какой-то конкретный алгоритм, это просто довольно общий способ решения задач, когда на каждой итерации берём по максимуму для нашего решения, без особых раздумий, как в ДП.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2019, 10:11
Помогаю со студенческими работами здесь

Выяснить за какое наименьшее число телепортаций можно переместиться на другую планету
Как-то после тяжелого дня в школе с уроками астрономии, физики и экономики в голове Митиньке все перемеша- лось, и парню приснился...

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

Какое наименьшее число можно записать в виде суммы простых чисел по крайней мере 5000 различных способов?
Число 10 можно записать в виде суммы простых чисел ровно пятью различными способами: 7 + 3 5 + 5 5 + 3 + 2 3 + 3 + 2 + 2 2 + 2 +...

Какое наибольшее и какое наименьшее число минимальных остовных деревьев может иметь граф
Здравствуйте. 1. Какое наибольшее и какое наименьшее число минимальных остовных деревьев может иметь граф на n вершинах и с n рёбрами,...

Определите, какое наименьшее число операций необходимо, чтобы получить из числа 1 число N
Имеется калькулятор, который выполняет три операции: 1. Прибавить к числу X единицу. 2. Умножить число X на 2. 3. Умножить число X на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru