![]() |
|
Модераторы: Alx, Fixin |
![]()
|
|
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Прямоугольная детская площадка полностью замощена N плитками. Все плитки прямоугольные, возможно разного размера. Плитки не перекрываются.
На этой площадке решили построить песочницу. Чтобы подготовить место для песочницы, необходимо вынуть не более K плиток таким образом, чтобы песочница занимала все освободившееся пространство, была прямоугольной и имела максимально возможную площадь. Напишите программу, которая определяет расположение песочницы, удовлетворяющей перечисленным выше требованиям. Формат входных данных Введем систему координат так, чтобы начало координат совпадало с одним из углов площадки, а оси координат шли вдоль сторон площадки. В этом случае противоположный угол площадки окажется в точке (X,Y). Первая строка входного файла содержит два числа X и Y (натуральные числа, не превышающие 10000). Во второй строке заданы числа N и K (1<=K<=N<=2000). Следующие N строк файла содержат по четыре целых числа Xi,1, Yi,1, Xi,2, Yi,2, задающих координаты двух противоположных углов плитки (0<=Xi,1<Xi,2<=X, 0<=Yi,1<Yi,2<=Y). Формат выходных данных В выходной файл выведите координаты двух противоположных углов найденного прямоугольника. Если решений несколько, выведите любое из них. Вход: 7 5 8 3 0 0 2 1 2 0 4 1 0 1 1 3 1 1 4 3 0 3 4 4 0 4 6 5 4 0 6 4 6 0 7 5 Выход: 0 1 4 4 - координаты 12 - площадь 3 кол-во плиток Я вот, например, создавал прямоугольник с началом в начале одного из прямоугольников, а конец в конце другого. Проблема посчитать кол-во прямоугольников внутри моего. Если перебором, то долго получается. У меня есть мое решение (на си) и еще три решения от жюри (на паскале). Как эти три работают – фиг их знает. Еще есть пятнадцать тестов с ответами к ним. Если хотите, могу прислать архив. Еще раз уточняю вопрос: как посчитать кол-во прямоугольников внутри моего, если оптимизировать? P. S. Задача довольно известная. Добавлено @ 20:23 В этом примере не проблема. А когда 1000 плиток из 2000 вынуть надо - тогда тормозно. Добавлено @ 20:24 А это мой фиговый код на си:
Это сообщение отредактировал(а) Fixin - 19.2.2005, 20:53 |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Ну так какие будут варианты решений по обеим задачам? Вот эта кажется интереснее.
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Энтузиастов полон двор.... у всех "мысля горит", аж прожигает всё.
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Извини, сейчас маленько не до этого...
Что бы мозги задачу проще усваивали, пиши внятно. Плитки можно только вынимать, а не переставлять местами. Следовательно ищем ровные линии собирающиеся до квадратов, ведь песочница точно подходит к плиткам, никаких мелких дырок по краям. Грубо, рассматривать столбики, ищем ровные вертикальные линии. Нашли, ищем пересекающиеся горизонтальные линии, хотя лучше просмотреть все столбики, а затем все ряды, нам ведь скорость особо не важна. Собрали из линий прямоугольники, подсчитываем сколько там плиток, берём самую большую площадь с количеством отсеянных плиток не более чем заданно. Собстна где ты застопорился? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: нет Всего: 18 |
Краз на скорости застопорился. Последние варианты - боле-меня нормально. Срок - 3 сек при 2000 элементов. Моя - от 3 до 10.
Поблема в подсчете прямоугов внутри искомого. В скорости. Мысля у тебя хорошая. Счас новую версию закатаю. Это сообщение отредактировал(а) Fixin - 19.2.2005, 20:52 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |