题目:两辆汽车相隔l 米 相对而行,这段距离内有着n面旗帜,汽车每路过一面旗帜,速度+ 1,
a[n]代表第n面旗帜的位置,求它们相遇的时间
思路:双指针法,当**(x指针下一个旗帜位置-x指针当前位置)/x指针当前速度 + 总时间** 大于 y指针的同法时,说明y指针可以更快到达下一个加速点,所以先计算y指针的总时间与速度。到达最后一个点的时候,可能会出现,其中一个指针已经走了一段时间的路程的情况,所以要特别处理一下
for _ in range(int(input())):
n, le = map(int, input().split())
a = [0]+[*map(int, input().split())]+[le]
s = [y-x for x,y in zip(a[:-1], a[1:])] #差值
l,r = 0, n
tl, tr = 0,0
while r - l > 0:
ttl = s[l] / (l + 1) #到达下一个加速点所需时间
ttr = s[r] / (n - r + 1)
if tl + ttl > tr + ttr: #左指针总时间 大于右指针总时间
tr += ttr #右指针加上当前路段所需时间
r -= 1
else:
tl += ttl
l += 1
fsl , fsr = l + 1, n - r + 1 #最终速度
if tl > tr: #最后一个点的处理
fsl, fsr = fsr, fsl
tl, tr = tr, tl
print(tr + ((s[r] - (tr - tl)*fsl) / (fsl+fsr)))