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

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

Здравствуйте, уважаемые знатоки =)
Есть такая задача: дано N точек, N <= 2000; нужно найти трегульник максимальной площади, вершинами которого есть 3 и тех N точек. (Точки уже образуют выпуклый многоугольник и заданы в порядке обхода).
У меня 90/100 баллов.(Решал перебором вершины, а остальные две — двумя указателями).
Хотелось бы услышать советы и желательно код.
P.S.: идея у меня вроде правильная, но вот руки... =D

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

»
9 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

Читаю заголовок — понимаю, что человеку интересно знать решение задачи или что-то уточнить. Читаю пост, и понимаю, что человек знает решение, да и к тому же рассказал его в посте. Дальше понимаю, что проблема в другом — в коде. А кода нет...

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +23 Проголосовать: не нравится

    Так-то оно и есть)) Ищу человека, который писал подобное.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +20 Проголосовать: не нравится

      Ну ок. Но в посте просятся советы, дам один. Понятно как решать задачу за куб. И ошибиться там негде. Напиши стресс-тест.

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +16 Проголосовать: не нравится

        Да у меня быдлокод, там что-то убери и все работать не будет :) Вот я и хочу чистую красивую реализацию увидеть. Этот метод(2 указателя) — вообще очень интересная тема.

»
9 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

N^2 * log(N) заходит?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +16 Проголосовать: не нравится

    Думаю, что да. Ты хочешь перебрать пару(вершини при основе), а потом тернарник запустить, чтоб 3-ую вершину найти(которая будет образовывать макс. высоту треугольника)?

»
9 лет назад, # |
  Проголосовать: нравится +37 Проголосовать: не нравится

Извиняюсь за оффтоп, но как вонимать вот это: 8568517, 8572637?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    У меня был плохой день... =) Теперь я уже вырос и не делаю подобных вещей. Да и по правилам КФ ты не должен вылаживать свой код в интернет во время соренования(себя ты тоже спалил).

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится -6 Проголосовать: не нравится

      Интересно, куда же я его выложил?)

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится

        Интересно, откуда же я его взял?

        • »
          »
          »
          »
          »
          9 лет назад, # ^ |
            Проголосовать: нравится -11 Проголосовать: не нравится

          Мне тоже это интересно)

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

            pastebin.ru Ты выложил и не знаешь об этом? Может, ты сам его оттуда взял? =)

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

              Боже, что ты несешь... Будь так добр предъявить пруф

              • »
                »
                »
                »
                »
                »
                »
                »
                9 лет назад, # ^ |
                  Проголосовать: нравится +13 Проголосовать: не нравится

                И без пруфов понятно, что если у двух человек во время соревнования сдан одинаковый код — значит либо один дал свой код второму, либо им обоим дал код кто-то третий

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится

      Может все-таки выкладывать?

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

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

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