问题描述
给出n个线段以及它们的左端点和右端点。我们要求得到这些线段覆盖部分的长度。如线段[1,2]和[2,3]覆盖了数轴上1到3这个部分,所以它们覆盖的长度就是2。
输入格式
第一行一个数n表示有n条线段,之后的n行每行两个整数表示每个线段的左端点和右端点。
输出格式
一个数表示覆盖部分的长度。
样例输入
3
1 2
2 3
4 5
样例输出
3
数据规模和约定
0<n<=1000, 答案不超过32位整数。
看到这个问题我首先想到的是集合的并集来计算总覆盖长度
由于端点均是整数值,因此每个区间的覆盖的数恰好就是 range(左端点, 右端点)
利用set.union()计算所有区间的并集,那么并集的大小就是总覆盖长度
n = int(input())
# 总覆盖数轴
total = set()
for i in range(n):
t_list = list(map(int, input().split()))
t_set = set(range(t_list[0], t_list[1]))
total = set.union(total, t_set)
print(len(total))