【貪心】時空定位I
阿新 • • 發佈:2018-07-21
img display ide 選擇 vector ems 描述 code ++i
每一組測試數據的第一行有一個整數數n,n表示共有n個定位裝置,隨後的一行,有n個實數Ri,Ri表示該定位裝置能覆蓋的圓的半徑。
題目描述
張琪曼已經確定了李旭琳在一個長為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
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #defineView CodeLL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; int t,n; double aa[1005]; void init(){ cin>>t; } void solve(){ while(t--){ cin>>n; range(i,0,n-1)cin>>aa[i]; sort(aa,aa+n);int cnt=0;double now=0; rerange(i,n-1,0){ if(now>=20)break; now+=2*sqrt(aa[i]*aa[i]-1); ++cnt; } cout<<cnt<<endl; } } int main() { init(); solve(); return 0; }
【貪心】時空定位I