-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathN_flowerbeds.py
76 lines (65 loc) · 3.41 KB
/
N_flowerbeds.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
N. Клумбы
Алла захотела, чтобы у неё под окном были узкие клумбы с тюльпанам.
На схеме земельного участка клумбы обозначаются просто горизонтальными
отрезками, лежащими на одной прямой. Для ландшафтных работ было нанято
n садовников. Каждый из них обрабатывал какой-то отрезок на схеме.
Процесс был организован не очень хорошо, иногда один и тот же отрезок
или его часть могли быть обработаны сразу несколькими садовниками.
Таким образом, отрезки, обрабатываемые двумя разными садовниками,
сливаются в один. Непрерывный обработанный отрезок затем станет клумбой.
Нужно определить границы будущих клумб.
Рассмотрим примеры.
Пример 1:
Два одинаковых отрезка [7,8] и [7,8] сливаются в один, но потом их
накрывает отрезок [6,10]. Таким образом, имеем две клумбы с
координатами [2,3] и [6,10].
Пример 2
Отрезки [2,3], [3,4] и [3,4] сольются в один отрезок [2,4].
Отрезок [5,6] ни с кем не объединяется, добавляем его в ответ.
Формат ввода
В первой строке задано количество садовников n. Число садовников не
превосходит 100000.
В следующих n строках через пробел записаны координаты клумб в формате:
start end, где start —– координата начала, end —– координата конца.
Оба числа целые, неотрицательные и не превосходят 107. start строго меньше,
чем end.
Формат вывода
Нужно вывести координаты каждой из получившихся клумб в отдельных строках.
Данные должны выводится в отсортированном порядке —– сначала клумбы с меньшими
координатами, затем —– с бОльшими.
Пример 1
Ввод
4
7 8
7 8
2 3
6 10
Вывод
2 3
6 10
"""
from typing import List
def flowerbed(count_vector: int, vector_list: List[List[int]]):
results = []
vector_list.sort()
vector_start, vector_end = vector_list[0]
index = 1
while index < count_vector:
if vector_list[index][0] <= vector_end:
curr_end = vector_list[index][1]
if curr_end > vector_end:
vector_end = curr_end
else:
results.append([vector_start, vector_end])
vector_start, vector_end = vector_list[index]
index += 1
results.append([vector_start, vector_end])
for result in results:
print(*result)
if __name__ == '__main__':
count_vector = int(input())
vector_list = []
for _ in range(count_vector):
vector_list.append(list(map(int, input().split())))
flowerbed(count_vector, vector_list)