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

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

Вам предлагается два задания с похожими условиями: задание А и задание

Условие

На плоскости дан набор точек с целочисленными координатами. Необходимо найти четырёхугольник наибольшей площади с вершинами в этих точках, две вершины которого лежат на оси Ox, а две оставшиеся - по разные стороны от оси Ox. Вам предлагается два задания с похожими условиями: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Задание Б более сложное, его решение оценивается выше. Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Задание А. Имеется набор данных, состоящий из 10 пар координат. Напишите программу для решения такой задачи. В этом варианте задания оценивается только правильность программы, время работы и размер использованной памяти не имеют значения.

Максимальная оценка за правильную программу - 2 балла. Задание Б. Имеется набор данных, состоящий из пар координат. Пар может быть много. Напишите программу для решения этой задачи.

Постарайтесь сделать программу эффективной по времени и используемой памяти (или хотя бы по одной из этих характеристик).Программа считается эффективной по времени, если время работы программы пропорционально количеству пар чисел N, т. е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.

Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.

Максимальная оценка за правильную программу, эффективную по времени и памяти, — 4 балла.

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

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

Программа должна вывести одно число — максимальную площадь четырёхгольника, удовлетворяющего условиям задачи. Если такого четырёхугольника не существует, программа должна вывести ноль. Пример входных данных:60 02 00 23 -35 -56 6Пример выходных данных для приведённого выше примера входных данных:11 Рассматривайте только четырёхугольники со сторонами лежащими не на оси Ox. Комментарий.В оригинальной формулировке задачи последнего условия нет, что создаёт дополнительные трудности при поиске необходимых четырёхугольников.

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

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

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

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

    Решение. Искомый четырёхугольник состоит из двух треугольников с общим основанием, лежащим на оси Ox, при этом один треугольник лежит выше этой оси, другой - ниже. Площадь четырёхугольника будет максимальной, если вершины на оси Ox будут расположены как можно дальше друг от друга, а вершины, не лежащие на этой оси, — как можно дальше от неё. Программа читает исходные данные, не запоминая все точки в массиве. Для каждой точки проверяется её принадлежность оси Ox (условие y=0). Среди точек, лежащих на оси, необходимо найти наиболее далеко отстоящие друг от друга - они дадут наибольшее возможное общее основание двух треугольников. Это будут точки с наименьшим и наибольшим значением координаты x. Среди точек, не лежащих на оси Ox, надо найти две точки, расположенные по разные стороны от оси и как можно дальше от неё, — они дадут наибольшие возможные значения высот треугольников. Это будут точки с наибольшим положительным инаименьшим отрицательным значением координаты y.Таким образом, задача сводится к нахождению максимального и минимального x среди точек, у которых y=0, максимального и минимального y среди остальных точек и нахождению площади четырёхугольника на основе этих данных.

    Перед выводом результата необходимо убедиться в существовании искомого четырёхугольника. Пример правильной и эффективной программы на языке Паскальprogram c4;varn: integer;x, y: integer;xmin, xmax: integer;xsearch: boolean;ymin, ymax: integer;i: integer;s: real;beginxsearch := true;xmin := 0; xmax := 0;ymin:=0; ymax := 0;readln(n);for i:=1 to n do beginreadln(x,y);if y=0 then beginif xsearch or (x < xmin) then xmin:=x;if xsearch or (x > xmax) then xmax:=x;xsearch:=false;endelse if y < ymin then ymin:=yelse if y > ymax then ymax:=yend;if (xmax>xmin) and (ymin<0) and (ymax>0)then s := (xmax-xmin)(ymax-ymin)/2else s := 0;writeln(s);end. Пример правильной и эффективной программы на языке Бейсик DIM n AS INTEGER DIM x, y AS INTEGER DIM xmin, xmax AS INTEGER DIM xsearch AS INTEGER DIM ymin, ymax AS INTEGER DIM i AS INTEGER DIM s AS DOUBLE xsearch = 1 xmin = 0: xmax = 0 ymin = 0: ymax = 0 INPUT n FOR i = 1 TO n INPUT x, y IF y = 0 THEN IF xsearch = 1 OR x < xmin THEN xmin = x IF xsearch = 1 OR x > xmax THEN xmax = x xsearch = 0 ELSEIF y < ymin THEN ymin = y ELSEIF y > ymax THEN ymax = y END IF NEXT i IF xmax > xmin AND ymin < 0 AND ymax > 0 THEN s = (xmax - xmin) * (ymax - ymin) / 2 ELSE s = 0 END IF PRINT s Пример правильной и эффективной программы на Алгоритмическом языкеалг c4начцел nцел x,yцел xmin=0, xmax=0лог xsearch=дацел ymin=0, ymax=0цел iвещ sввод nнц для i от 1 до nввод x, yесли y=0тоесли xsearch или xесли xsearch или x>xmax то xmax:=x всеxsearch:=нетиначеесли yесли y>ymax то ymax:=y всевсекцесли xmax > xmin и ymin < 0 и ymax > 0то s:=(xmax-xmin)(ymax-ymin)/2иначе s:=0всевывод sкон Пример решения задачи А на языке Паскаль. var coord: array[1..10, 1..2] of integer; {исходные данные} x, y: integer; {координаты очередной точки} xminpos, xmaxpos, yminpos, ymaxpos: integer; {координаты точек четырёхугольника с наибольшей площадью} s: real; {площадь четырёхугольника} i, j: integer;begin xminpos := MaxInt; xmaxpos := -(MaxInt-1); yminpos := MaxInt; ymaxpos := -(MaxInt-1); for i := 1 to 10 do begin read(x, y); coord[i, 1] := x; coord[i, 2] := y; end; for i := 1 to 10 do begin if (coord[i, 2] =

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

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

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

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

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

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

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

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

Вам предлагается два задания с похожими условиями: задание А и задание — решение с объяснением | Lom Ai