1. 程式人生 > >【貪心】時空定位I

【貪心】時空定位I

img display ide 選擇 vector ems 描述 code ++i

題目描述

張琪曼已經確定了李旭琳在一個長為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)
#define
LL 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; }
View Code

【貪心】時空定位I