隧道计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Kangyucheng/article/details/82350288

 考虑下面的隧道图片,由一系列天花板高度确定,即序列(7,9,6,8,7,9,8,7,9,6,8,7,9,8,7) )和相应的楼层高度序列,即序列(6,2,1,5,4,3,6,6,2,1,5,4,3,6,6)。在隧道西边,可以看到距离为2的隧道(单位,无论是什么);这用蓝色表示。在隧道内,可以看到最大距离为6的隧道;这是用绿色描绘的。请注意,在此图片中,蓝色和绿色片段的高度处于同一水平,但一般情况下它们可能处于不同的水平。此外,可能存在许多绿线段,因为可能存在隧道的许多部分,其中可以在相同的最大距离处看到隧道。

第一序列的第i个数应严格大于第二序列的第i个数,因为在隧道中的任何点,天花板都在地板上方。如果不是这种情况,则程序输出另一个错误消息并退出。

该程序然后输出:
从西方看隧道外的人可以看到隧道的距离;
在隧道内时人们可以看到隧道的最大距离。

ceiling = [7,9,6,8,7,9,8,7,9,6,8,7,9,8,7]
floor = [6,2,1,5,4,3,6,6,2,1,5,4,3,6,6]

if len(ceiling) != len(floor):
    exit("wrong")
n = len(floor)

# First step, we should find west tunnel
min_ceiling = ceiling[0]
max_floor = floor[0]
for i in range(n):
    if ceiling[i]< min_ceiling:
        min_ceiling = ceiling[i]

    if floor[i] > max_floor:
        max_floor = floor[i]

    if max_floor >= min_ceiling:
        print i
        break
# Second step, we should find inside tunnel

max_length = 0
for i in range(n):

    top = max(ceiling)
    cei = ceiling[i]
    flo = floor[i]
    bot = 0

    a = [bot,flo,cei,top]
    for j in range(i+1,n):
        if bot < flo or cei<top :
            if floor[j] >= flo:
                flo = -1
            else:
                bot = floor[j]
            if ceiling[j] <= cei:
                cei = max(ceiling)+1
            else:
                top = ceiling[j]
        else:
            if j-i-2>max_length:
                max_length = j-i-2
            break
print max_length



猜你喜欢

转载自blog.csdn.net/Kangyucheng/article/details/82350288