0004. Пересечение отрезков
Имя входного
файла
|
input.txt
|
Имя выходного
файла
|
output.txt
|
Максимальное
время работы на одном тесте
|
2 секунды
|
Ограничение по
памяти
|
64 Мб
|
Два отрезка на плоскости заданы целочисленными
координатами своих концов в декартовой системе координат. Требуется определить,
существует ли у них общая точка. Гарантируется, что отрезки не лежат на одной
прямой.
Формат входных данных
Входной файл содержит координаты четырех точек, задающих
отрезки. В первой строке содержатся координаты первого конца первого отрезка,
разделенные пробелом, во второй ‑ второго конца первого отрезка, в
третьей и четвёртой ‑ координаты концов второго отрезка. Все
координаты – целые числа, не превосходящие 1 000 000 по
абсолютной величине.
Формат выходных данных
В выходной файл следует вывести слово "Yes" (без
кавычек), если общая точка есть, или слово "No" ‑ в
противном случае. В том случае, если пересечение имеется, выведите во второй
строке через пробел координаты точки пересечения с точностью пять знаков после
запятой.
Пример
input.txt
|
output.txt
|
0 0
2 2
0 2
2 0
|
Yes
1 1
|
0 0
1 0
0 1
1 1
|
No |
Решение.
Очень нерациональное, но для показа идеи
var xmin1, ymin1, xmax1, ymax1, xmin2, ymin2, xmax2, ymax2, x1, x2,y1, y2 : integer; begin read (xmin1, ymin1, xmax1, ymax1, xmin2, ymin2, xmax2, ymax2); if xmin1> xmax1 then begin x1:= xmin1; xmin1:= xmax1; xmax1:= x1; end; if xmin2> xmax2 then begin x2:= xmin1; xmin2:= xmax2; xmax2:= x2; end; if ymin1 > ymax1 then begin y1:= ymin1; ymin1:= ymax1; ymax1:= y1; end; if ymin2 > ymax2 then begin y2:= ymin2; ymin2:= ymax2; ymax2:= y2; end;
if (xmax1 >= xmin2) and (xmax2 >= xmin1) and (ymax1 >= ymin2) and (ymax2 > ymin1) then writeln ('yes') else writeln ('no');
end.
|