Задача про отрезки
От: Lister  
Дата: 10.10.14 14:57
Оценка:
На координатной оси OX есть отметки (x1, x2, x3...). От каждой отметки откладываем отрезки

одинаковой длины d.
В тех местах где есть отрезки на оси OX, мы должны поднять перпендикуляры с концов отрезков

с заданной высотой.
Если встречаются n отрезков, которые совпадают (накладываются друг на друга), то высота

перпендикуляра увеличивается в n раз в тех местах,
где отрезки совпадают.

Даны отметки: 0, 2, 4, 7. Длина отрезка d = 6. Высота перпендикуляра h = 1.

Решение, которое мне пришло на ум мне не нравится. Громоздко выходит.
У нас есть начала координат отрезков, мы можем посчитать концы координат этих отрезков.

Создаём список с этими координатами и сортируем их по возрастанию. К этому списку будет ещё

один список с аналогичной длиной и элементами, установленными в 0. Берём первую отметку и от

неё проходимся по первому списку и каждую ячейку второго списка инкрементируем. Как только

встречаем конец отрезка, мы переходим ко второй отметке. И так далее. В итоге у нас

получается вот такое:


Координаты: 0 2 4 6 7 8 10 13
Высоты:1 2 3 3 3 3 2

1
После этого нас нужно ещё раз пройтись по этим спискам и выяснить где заканчивается первый

отрезок и после этой ячейки вставить дополнительную ячейку со значением 2 в список высот. Ну

и так далее.
Может кто-то видит более простое решение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.