時間限制: 1 sec 記憶體限制: 128 mb
題目描述
一條街道安裝無線網路,需要放置m個路由器。整條街道上一共有n戶居民,分布在一條直線上,每一戶居民必須被至少一台路由器覆蓋到。現在的問題是所有路由器的覆蓋半徑是一樣的,我們希望用覆蓋半徑盡可能小的路由器來完成任務,因為這樣可以節省成本。
輸入第一行包含兩個整數m和n,以下n行每行乙個整數hi表示該戶居民在街道上相對於某個點的座標。
輸出僅包含乙個數,表示最小的覆蓋半徑,保留一位小數。
樣例輸入
231
310
樣例輸出1.0
提示
對於100%的資料,有1≤n,m≤100000,-10000000≤hi≤10000000。
思路二分找直徑
應用upper_bound函式判斷直徑是否符合條件
具體還請看**吧
**:
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
#define inf 0x3f3f3f3f
#define p pair
using
namespace std;
typedef
long
long ll;
const
double eps=
0.01
;const
int n=
1e5+10;
const
int mod=
1000000007
;int m,n,a[n]
;bool
check
(double d)
return1;
}int
main()
sort
(a,a+n)
;int l=
1,r=a[n-1]
-a[0]+
1,mid;
while
(l<=r)
else l=mid+1;
}printf
("%.1f",(
double
)l/2.0);
return0;
}
路由器安置 Routing
一條街道安裝無線網路,需要放置m個路由器。整條街道上一共有n戶居民,分布在一條直線上,每一戶居民必須被至少一台路由器覆蓋到。現在的問題是所有路由器的覆蓋半徑是一樣的,我們希望用覆蓋半徑盡可能小的路由器來完成任務,因為這樣可以節省成本。1 n,m 100000 首先這種問題可以採用二分答案的方法.嘗試...
路由器安置(routing)Solution
首先看一下題面吧 問題描述 一條街道安裝無線網路,需要放置m個路由器。整條街道上一共有n戶居民,分布在一條直線上,每一戶居民必須被至少一台路由器覆蓋到。現在的問題是所有路由器的覆蓋半徑是一樣的,我們希望用覆蓋半徑盡可能小的路由器來完成任務,因為這樣可以節省成本。輸入資料 輸入檔案第一行包含兩個整數m...
分治 路由器安置問題
題設 一條街道安裝無線網路,需要放置m個路由器。整條街道上一共有n戶居民,分布在一條直線上,每一戶居民必須被至少一台路由器覆蓋到。現在的問題是所有路由器的覆蓋半徑是一樣的,我們希望用覆蓋半徑盡可能小的路由器來完成任務,因為這樣可以節省成本。cover函式檢測該直徑是否足夠覆蓋該位址 upper bo...