噴水裝置(一)
時間限制:3000 ms | 內存限制:65535 KB
難度:3
-
描述
- 現有一塊草坪,長爲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 <cmath>
#include <algorithm>
using namespace std;
bool compare(double a,double b)
{
return a>b; //a>b 降序,a<b,升序
}
int main()
{
int TestNum,size;
double data;
cin>>TestNum;
while(TestNum--)
{
cin>>size;
double* arr = new double[size];
for(int i =0;i<size;i++)
{
cin>>data;
arr[i] = data;
}
sort(arr,arr+size,compare);
double key = 20.0;
int j = 0;
while(key>0)
{
key -= 2*sqrt(arr[j]*arr[j] - 1.0);
j++;
}
cout<<j<<endl;
delete [] arr;
}
return 0;
}
//由上圖可知,圓與長方形的幾何關係滿足等式 R^2 = L^2+ 1^2; 圓半徑R默認大於等於1,即切距2L爲完全覆蓋的長度,當累計圓的切距大於等於長方形長度時,滿足條件。(根據題意,對數組按降序排列,找出最少的個數。)