использование из в производственном проектировании, начиная
производственными системами , проектированием печатных плат,
проектированием и дизайном архитектурных сооружений и т.д. Одна из
проблем , которая появляется при этом - удаление невидимых линий при
отрисовке изображения на дисплее. Невидимые линии – это линии, которые
скрыты другими частями изображения.
Проблема
Ваша задача помочь городскому архитектору при проектировании городских
построек. Программа, написанная Вами должна правильно рисовать
очертания строений в городе. Для того чтобы проблема была удобной для
решения на компьютере , все здания представляются прямоугольниками ,
имеющими общее основание. Таким образом , весь город представляется
двухмерным из любой точки наблюдения. Каждое здание представлено
тройкой чисел (L
i
, H
i
, R
i
), где L
i
и R
i
левая и правая координата здания
соответственно, а H
i
высота строения. На рисунке ниже здания описываются
следующими данными: (1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22),
(23,13,29), (24,4,28). Очертания строений будут описываться следующей
последовательностью : (1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0)
Входные данные
Входные данные представляют собой последовательность троек (L
i
, H
i
, R
i
для каждого здания. Все координаты зданий представляют собой целые числа
не большие, чем 10000. Исходные данные содержат информацию как
минимум об одном здании, максимум о 50-ти . Каждая тройка чисел занимает
одну строку исходного файла , все числа разделены одним или несколькими
пробелами. Тройки чисел отсортированы по левой координате по
возрастанию, т.е . информация о зданиях, расположенных левее идет раньше.
Выходные данные
Результатом работы программы должен быть вектор, описывающий
очертание зданий. В этом векторе (V
1
,V
2
,....V
n
), V
i
– с четными i описываются
длины вертикальных линий. V
i
– с нечетными i представляют собой длины
горизонтальных линии. Можно говорить, что этот вектор представляет собой
путь пера по экрану для отрисовки . Последней компонент вектора должен
быть нулем .
Пример исходных данных
1 11 5
{
Функция получения координаты перечения слов
Если функция возвращает true, то координаты пересечения
слов st1 и st2 будут находиться в i0, j0
}
function GetCross(var st1, st2 : string; var i0, j0 : integer) : boolean;
var i, j : integer;
b : boolean;
begin
{Сначала считаем , что пересечение не найдено}
i0 := 0; j0 := 0;
i := 1; b := true;
{Проверяем все возможные варианты }
while b and (i <= length(st1)) do begin
j := 1;
while b and (j <= length(st2)) do begin
if (st1[i] = st2[j]) then begin
{Если вариант нашелся , запоминаем его координаты и сбрасываем
флаг}
b := false;
i0 := i; j0 := j;
end;
inc(j);
end;
inc(i);
end;
GetCross := not b;
end;
var
k, i, j, i1, i2, j1, j2, min, max : integer;
b : boolean; {флаг существования пересечения}
stw : array [1..4] of string; {массив входных слов}
25
56