2012-04-26 7 views
-3

Я получаю N + 2 точки с целыми координатами. 2 из них являются базовыми. Через эти базовые точки нужно провести две параллельные линии. Каково максимальное количество точек, расположенных между двумя параллельными линиями? Извините за мой английский и спасибо заранее!Максимальное количество точек между двумя параллельными линиями

На следующем рисунке КРАСНЫЕ точки являются базовыми, ЧЕРНЫЕ - это обычные точки. Желтая область - это максимальное количество черных точек. Если одна из черных точек включена в одну из строк, считается, что эта точка IS находится между линиями.

http://i.stack.imgur.com/Awhg6.png

Я нашел решение в время сложности O (N * N), но это слишком медленно.

+0

Вы имеете в виду «максимальное количество точек на линии, соединяющей эти две линии»? Если да, то это должно быть перпендикулярно им или нет? Если перпендикулярно, то он будет таким же, как расстояние между линиями. В противном случае вы можете определить расстояния между углами и выбрать самый длинный. Если вы не говорите о точках на линии, нам, вероятно, потребуется еще больше объяснений. –

+1

Вопрос C++? –

+0

Для сторонников: это законный вопрос. Возможно, ошибочно и не проявляет признаков собственных усилий, но ни оффтопик, ни «не настоящий вопрос». –

ответ

2

Представьте, что ваши две линии проходят через обе базовые точки. Ширина полосы между линиями равна 0, и внутри нее нет точек (или есть некоторые точки, в зависимости от вашего определения «внутри»).

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

Предполагая, что линии фиксируют число оборотов за единицу времени, вычислите для каждой точки время ее ввода полосы между линиями и время ее выхода из полосы. (Эти времена в основном являются углами). Сортируйте оба вида событий вместе. Теперь просмотрите события, подсчитав +1 для каждого события записи и -1 для каждого события выхода. Для событий, которые происходят в одно и то же точное время, сначала выполните сначала -1 или +1, в зависимости от вашего определения «внутри». Следите за максимальным количеством отсчетов.

Смежные вопросы