题目描述
在一条笔直的公路上安装了N
个路灯,
从位置0
开始安装,路灯之间间距固定为100
米
每个路灯都有自己的照明半径
请计算第一个路灯和最后一个路灯之间,
无法照明的区间的长度和。
输入描述
第一行为一个数N
,表示路灯个数,1 <= N <= 100000
第二行为N
个空格分割的数,表示路灯的照明半径,1 <= 照明半径
输出描述
无法照明的区间的长度和。
# 解法 """ 实际考的是区间合并问题 示例: 6 50,20,60,120,30,230 其中表示在0,100,200,300,400,500米处安装上述半径的路灯 看每个路灯能照明的区间 [0,50]\[100-20,100+20]([80,120])\[140,260]\[180,420]\[370,430]\[270,730] [0,50]\[80,120]\[140,420]\ [0,50]\[80,120]\[140,430] [0,50]\[80,120]\[140,730] """ if __name__ == "__main__": while True: try: N = int(input()) deng = list(map(int, input().strip().split(','))) sum_right = 0 res = [] # 放灯照明区间的位置 for i in range(N): #左边照的坐标位置 left_light = max(0 , 100*i-deng[i]) #右边照的坐标位置 right_light = 100*i + deng[i] #为空或者左边坐标不在上个区间内 if res == [] or res[-1][1] < left_light: res.append([left_light,right_light]) # 有区间重合,合并 else: res[-1][1] = right_light for i in range(1,len(res)): sum_right += res[i][0] - res[i-1][1] print(sum_right) except: break