生活随笔
收集整理的這篇文章主要介紹了
隧道计算
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?考慮下面的隧道圖片,由一系列天花板高度確定,即序列(7,9,6,8,7,9,8,7,9,6,8,7,9,8,7) )和相應(yīng)的樓層高度序列,即序列(6,2,1,5,4,3,6,6,2,1,5,4,3,6,6)。在隧道西邊,可以看到距離為2的隧道(單位,無論是什么);這用藍(lán)色表示。在隧道內(nèi),可以看到最大距離為6的隧道;這是用綠色描繪的。請注意,在此圖片中,藍(lán)色和綠色片段的高度處于同一水平,但一般情況下它們可能處于不同的水平。此外,可能存在許多綠線段,因為可能存在隧道的許多部分,其中可以在相同的最大距離處看到隧道。
第一序列的第i個數(shù)應(yīng)嚴(yán)格大于第二序列的第i個數(shù),因為在隧道中的任何點,天花板都在地板上方。如果不是這種情況,則程序輸出另一個錯誤消息并退出。
該程序然后輸出:
從西方看隧道外的人可以看到隧道的距離;
在隧道內(nè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 ibreak
# Second step, we should find inside tunnelmax_length = 0
for i in range(n):top = max(ceiling)cei = ceiling[i]flo = floor[i]bot = 0a = [bot,flo,cei,top]for j in range(i+1,n):if bot < flo or cei<top :if floor[j] >= flo:flo = -1else:bot = floor[j]if ceiling[j] <= cei:cei = max(ceiling)+1else:top = ceiling[j]else:if j-i-2>max_length:max_length = j-i-2break
print max_length
總結(jié)
以上是生活随笔為你收集整理的隧道计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。