Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Олимпиады

Страница: 1 |

 

  Вопрос: Олимпиада х.з. Задача 4 Добавлено: 29.12.03 06:35  

Автор вопроса:  Павел | Web-сайт: www.vbnet.ru | ICQ: 326066673 
Задача 4 с какой-то олимпиады. 35 баллов из 200.



На плоскости заданы N прямоугольников со сторонами, параллельными
осям координат (N <= 20). Требуется указать одну из точек,
принандлежащую наибольшему возможному количеству этих прямоугольников.

Входные данные: В первой строке входного файла Input.txt указано
число N. В последующих N строках содержится по 4 вещественных числа
x1, y1, x2, y2 (x1, y1 - координаты левого нижнего, x2, y2 - правого
верхнего угла прямоугольника), числа в строках отделены пробелами.

Выходные данные: В выходном файле Output.txt должна находиться пара
вещественных чисел x, y - координаты искомой точки.

Пример Input.txt:
5
2 2 4 4
-5 1.5 3 4
-1.E20 -1.E20 1.E20 1.E20
1.1E-10 1.1E-10 1.2E-10 1.2E-10
0 0 9 9

Пример Output.txt:
2.5 3.5



Эту задачу я ещё не решил.

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #1
Добавлено: 03.01.04 01:40

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

Значит надо искать то самое множество, а потом уже наобум брать оттуда какую-нибудь точку.

Следовательно тут надо мутить со множествами, их пересечениями и объединениями. Это программа первого курса, а я на четвёртом - у меня проблемы, ни хрена уже не помню...

Но преполагаю, что надо так: сначала смотрим на ось Ох (или Оу). Потом проецируем все прямоугольники на неё и пробиваем самую "чёрную" область, то есть область в которой пересекается наибольшее количество прям-ков.

Потом делаем то же с другой осью и ищем пересечение этих "чёрных" областей. Полученный прям-к будет скоплением искомых точек. Выбирай середину - не ошибёшся :).

Самое сложное здесь: определить самую "чёрную" область, но и это не представляет особых проблем. Алгоритм типа:

1) находим самую правую левую сторону прям-ка.

2) находим самую левую правую сторону прям-ка.

3) если (1) левее (2), то всё в порядке, иначе (1)=(первая влево от (1)). goto (3).

4) наше "чёрное" место находится между (1) и (2).

Конечно, требует шлифовки, но незаинтересованному в результате, мне не особо хочется тратить столько сил на его реализацию. В общих чертах решил и всё! Вот если бы какой конкурс замутили, тогда...   :)

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 03.01.04 06:32

Если я правильно понял, задача элементарная. Создаем массив NxN, где границы между ячейками - сортированные координаты вершин прямоугольников. Затем по очереди "зарисовываем" прямоугольники, увеличивая ячейки на 1. А потом просто ищем максимум, получаем из координат ячейки координаты соответствующего "элементарного прямоугольника", берем, например, его центр и выдаем... Совсем несложная задача...

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 08.01.04 23:47

To Sharp: не совсем понял эту фразу:

границы между ячейками - сортированные координаты вершин прямоугольников

но если я правильно понял, то возражение - у нас ведь координатная плоскость. Соот-но один прямоуг-к может иметь порядок координат 10^234123412341234 (!!!), а другой

10^(-235623542345234). Это я, конечно, утрирую (хотелось бы посмотреть на переменные такого порядка), но массивы, ИМХО, здесь не полезут - надо чисто сравнением: что больше, а что меньше...

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 08.01.04 23:59

В олимпиадах всегда ставится ограничение на тип данных :) 10^(817262346) степени тебе никто не даст, если сам не попросишь. К тому же написано, что координаты - вещественные числа, что обозначает, что следует использовать тип double.

Что же касается мутной фразы "отсортированный массив координат точек вершин", понять ее несложно. Имеем два прямоугольника (-1.0,-1.0 - 1.0,1.0) и (0,0 - 2,2). Сортируем массив координат вершин по X-ам и Y-ам, получаем два массива: X-ов: {-1.0,0.0,1.0,2.0} и Y-ов: {-1.0,0.0,1.0,2.0}. Затем объявляем массив 3*3 (понятно, что он не может быть больше 2*N x 2*N), после чего просто заполняем его ячейки, инкрементируя их содержимое так, как расположены прямоугольники. Т.е.:

после 1-го прям-ка:

0 0 0

1 1 0

1 1 0

после 2-го:

0 1 1

1 2 1

1 1 0

Ищем максимум: 2 - находится (тут-то и понадобятся сохраненные раньше отсортированные X и Y) между 0 и 1 по Ox и между 0 и 1 по Oy. Возьмем центральную точку этого прямоугольника - 0.5,0.5 - она будет искомой точкой.

Ответить

Номер ответа: 5
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 13.01.04 22:40

Sharp, ты будешь смеяться, но в принципе я имел ввиду то же самое. Твоя двойка - моя "чёрная" зона...

 

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 14.01.04 01:31
Да, разве что ты не в тему упомянул про пересечение множеств...

Ответить

Номер ответа: 7
Автор ответа:
 K-00



ICQ: 179750444 

Вопросов: 7
Ответов: 20
 Профиль | | #7 Добавлено: 04.02.05 13:56
Sharp
 а что делать, если координаты прямоугольников - не целые цисла. Индексы массива будут также не целые.

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 04.02.05 19:57
Координаты прямоугольников хранятся в массиве, а не являются его индексами

Ответить

Номер ответа: 9
Автор ответа:
 K-00



ICQ: 179750444 

Вопросов: 7
Ответов: 20
 Профиль | | #9 Добавлено: 07.02.05 14:32
Не понимаю, что тогда индексы?

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 07.02.05 20:03
Индексы - это номера координат в отсортированном упорядоченном их множестве. Т.е., если у тебя есть координаты 1.5, 2.5 и 4.5, тогда индекс 2.5 - 2

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам