Присоединиться

11 класс·высокий уровень

Четырёхугольник наибольшей площади с вершинами в этих точках, две

Условие

На плоскости дан набор точек с целочисленными координатами. Необходимо найти четырёхугольник наибольшей площади с вершинами в этих точках, две вершины которого лежат на оси Oy, а две оставшиеся — по разные стороны от оси Oy.Напишите эффективную, в том числе по памяти, программу, которая будет решать эту задачу. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию. Описание входных данных.В первой строке вводится одно целое положительное число — количество точек N. Каждая из следующих N строк содержит два целых числа: сначала координата x, затем координата y очередной точки.

Описание выходных данных.

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

Пример входных данных: 6 0 0 2 0 0 2 3 −3 −5 −5 6 6Пример выходных данных для приведённого выше примера входных данных:11

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. Искомый четырёхугольник состоит из двух треугольников с общим основанием, лежащим на оси Oy, при этом один треугольник лежит выше этой оси, другой - ниже. Площадь четырёхугольника будет максимальной, если вершины на оси Oy будут расположены как можно дальше друг от друга, а вершины, не лежащие на этой оси, — как можно дальше от неё. Программа читает исходные данные, не запоминая все точки в массиве. Для каждой точки проверяется её принадлежность оси Oy (условие x = 0). Среди точек, лежащих на оси, необходимо найти наиболее далеко отстоящие друг от друга — они дадут наибольшее возможное общее основание двух треугольников. Это будут точки с наименьшим и наибольшим значением координаты y. Среди точек, не лежащих на оси Oy, надо найти две точки, расположенные по разные стороны от оси и как можно дальше от неё, — они дадут наибольшие возможные значения высот треугольников. Это будут точки с наибольшим положительным и наименьшим отрицательным значением координаты x. Таким образом, задача сводится к нахождению максимального и минимального y среди точек, у которых x = 0, максимального и минимального x среди остальных точек и нахождению площади четырёхугольника на основе этих данных. Перед выводом результата необходимо убедиться в существовании искомого четырёхугольника. Пример правильной и эффективной программы на языке Паскальprogram c4;var n: integer; x, y: integer; ymin, ymax: integer; ysearch: boolean; xmin, xmax: integer; i: integer; s: real;begin ysearch := true; ymin:=0; ymax := 0; xmin := 0; xmax := 0; readln(n); for i:=1 to n do begin readln(x,y); if x=0 then begin if ysearch or (y < ymin) then ymin:=y; if ysearch or (y > ymax) then ymax:=y; ysearch:=false; end else if x < xmin then xmin:=x else if x > xmax then xmax:=x end; if (ymax>ymin) and (xmin <

Осталось ещё 5 шагов

  1. and (xmax>0) then s :=…

  2. and (coord[i, 2]< yminpos) then yminpos :=…

  3. and (coord[i, 2] > ymaxpos) then ymaxpos :=…

  4. and (coord[i, 1]< xminpos) then xminpos :=…

  5. and (coord[i, 1] > xmaxpos) then xmaxpos :=…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Программирование»