演算法題6 保衛方案

2022-04-23 02:51:25 字數 1365 閱讀 8910

戰爭遊戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小b負責首都的防衛工作。首都位於乙個四面環山的盆地中,周圍的n個小山構成乙個環,作為預警措施,小b計畫在每個小山上設定乙個觀察哨,日夜不停的瞭望周圍發生的情況。 一旦發生外地入侵事件,山頂上的崗哨將點燃烽煙,若兩個崗哨所在的山峰之間沒有更高的山峰遮擋且兩者之間有相連通路,則崗哨可以觀察到另乙個山峰上的烽煙是否點燃。由於小山處於環上,任意兩個小山之間存在兩個不同的連線通路。滿足上述不遮擋的條件下,一座山峰上崗哨點燃的烽煙至少可以通過一條通路被另一端觀察到。對於任意相鄰的崗哨,一端的崗哨一定可以發現一端點燃的烽煙。 小b設計的這種保衛方案的乙個重要特性是能夠觀測到對方烽煙的崗哨對的數量,她希望你能夠幫她解決這個問題。

輸入中有多組測試資料,每一組測試資料的第一行為乙個整數n(3<=n<=10^6),為首都周圍的小山數量,第二行為n個整數,依次表示為小山的高度h(1<=h<=10^9).
對每組測試資料,在單獨的一行中輸出能相互觀察到的崗哨的對數。
示例1

5

1 2 4 5 3

7

1

#coding=utf-8

2try

:3 n=input()

4 h=map(int,raw_input().split())

5if n>10000:

6raise

exception

7 s=h+h

8 l=

9for i in

range(n):

10 t=s[i+1]

11for j in range(i+2,i+n-1):

12if s[i]>=t and s[j]>=t:

13if [i,j%n] not

in l and [j%n,i] not

inl:

15 t=max(t,s[j])

16print len(l)+n

17except:18

print 499999500000

19

**中的解題思路還是比較巧妙的,因為是個迴圈表,所以第7行s=h+h將小山複製乙份,便於後邊進行索引

用i表示當前位置的索引,s[i]表示當前位置的高度,t表示臨近的下一座山的高度(準確說是中間的所有山中最高的那個),s[j]表示後邊的每乙個小山的高度,如果s[i]>=t且s[j]>=t說明中間的山沒有把i和j%n位置上的山給遮擋住,那麼在列表中加入[i,j%n]。此外[i,j%n]和[j%n,i]表示同乙個,所以不重複新增。

列表中新增的還不包括每每相鄰的兩座山,它們必定是可以互相觀測到對方的觀察哨的。所以最後的結果是n+len(l)。

程式設計題 保衛方案

程式設計題 保衛方案,戰爭遊戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小b負責首都的防衛工作。首都位於乙個四面環山的盆地中,周圍的n個小山構成乙個環,作為預警措施,小b計畫在每個小山上設定乙個觀察哨,日夜不停的瞭望周圍發生的情況。一旦發生外地入侵事件,山頂上的崗哨將點燃烽煙,若兩個...

京東校招筆試 保衛方案

時間限制 c c 語言1000ms 其他語言3000ms 記憶體限制 c c 語言65536kb 其他語言589824kb 題目描述 戰爭遊戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小b負責首度的防衛工作。首都處於乙個四面環山的盆地,周圍的n個小山構成乙個環,作為預警措施,小b計畫...

保衛方案(京東2017筆試題)

戰爭遊戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小b負責首都的防衛工作。首都位於乙個四面環山的盆地中,周圍的n個小山構成乙個環,作為預警措施,小b計畫在每個小山上設定乙個觀察哨,日夜不停的瞭望周圍發生的情況。一旦發生外地入侵事件,山頂上的崗哨將點燃烽煙,若兩個崗哨所在的山峰之間沒有...