總網頁瀏覽量

2018年6月18日 星期一

2017.3月大學程式設計先修檢測 實作題 第四題(基地台)


Python Code:
n,k=input().split()#輸入n個服務點與k個基地台
n,k=int(n),int(k) #整數化
a=[] #存入服務點的串列
p=input().split() #將n個服數點串列化及數字化
a=[int(x) for x in p]
a=list(set(a)) #去除重複的元素
a=sorted(a) #服務點排序
l=1 #利用二分搜尋法,令最小直徑為1
r=((a[n-1]-a[0])/k)+1 #最大直徑,當只有一個基地台時的直徑
r=int(r)
while(l<r):
    s=-1 #最小比較值
    base=0 #先讓基地台為0台
    m=(l+r)/2
    m=int(m)
    for i in range(n): # 若服務點的位置比較大,需增設基地台
        if a[i]>s:
            s=a[i]+m
            base+=1
    if base<=k:
        r=m
    else:
        l=m+1
print(r)

Q1:如何找出這k個基地台位置?
Q2:若將這k個基地台平面化,如何找到基地台位置?

沒有留言:

張貼留言