Блог пользователя vintage_Vlad_Makeev

Автор vintage_Vlad_Makeev, 12 лет назад, По-русски

Здравствуйте!

Попалась мне вот такая вот задачка. Начал её как-то криво решать, потом заглянул в темы и увидел, что задача на графы. После этого совсем перестал понимать в какую сторону идти.

Подскажите пожалуйста!

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +5 Проголосовать: не нравится

Я думаю, тебе нужно построить DCEL и посчитать сколько фейсов (граней) в нём содержат 3 вершины.

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Проще говоря, построить граф, где вершины — точки пересечения каких-то двух прямых, а ребро есть между двумя точками, если они соединены отрезком. И в таком графе найти количество циклов длины три.

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

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

  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо!

    Но на полный балл это вряд ли зайдет...

    Я еще думал о чем-то типа добавлять прямые по одной и пересчитывать только те области, которые она поделила, но что-то практическое так и не придумалоь