1005 噴水裝置
描述
現有一塊草坪,長爲20米,寬爲2米,要在橫中心線上放置半徑爲Ri的噴水裝置,每個噴水裝置的效果都會讓以它爲中心的半徑爲實數Ri(0<Ri<15)的圓被溼潤,這有充足的噴水裝置i(1<i<600)個,並且一定能把草坪全部溼潤,你要做的是:選擇儘量少的噴水裝置,把整個草坪的全部溼潤。
輸入
第一行m表示有m組測試數據
每一組測試數據的第一行有一個整數數n,n表示共有n個噴水裝置,隨後的一行,有n個實數ri,ri表示該噴水裝置能覆蓋的圓的半徑。
輸出
輸出所用裝置的個數
樣例輸入
2
5
2 3.2 4 4.5 6
10
1 2 3 1 2 1.2 3 1.1 1 2
樣例輸出
2
5
分析:
每一個噴水裝置的噴水範圍是一個圓,園的半徑越大,噴射的範圍越廣。要想所用的噴水裝置最少,可以考慮將噴水按照半徑有大到小排列,依次使用。
對所有的噴水裝置半徑按從大到下的順序排序,根據勾股定理依次計算半徑到正方形頂點連線在橫軸上的射影的長度,每計算一次就乘以2再累加到總長度L上。若L第一次出現L>=20.0,則輸出此時已經累加的噴水裝置的個數。
代碼:
m=int(input())
while m:
n=int(input())
l=input().split()
for i in range(len(l)):
for j in range(len(l)-1):
if float(l[j])<float(l[j+1]):
l[j],l[j+1]=l[j+1],l[j]
b=[]
for a in l:
b.append(((2*float(a))**2-4)**0.5)
e=20
for c in range(len(b)):
e=e-b[c]
if e<=0:
break
print(c+1)
m=m-1