-
输入
-
第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。
输出
- 输出所用装置的个数
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
bool cmp(double a, double b)
{
return a > b;
}
double Lenth(double R, double w)
{
//这是因为考虑到要覆盖边界,画一个直角三角形可以得出。
return 2 * sqrt(R*R - w*w / 4);
}
int main()
{
const double len = 20,wid = 2;
int n,m;
cin >> n;
while (n--)
{
cin >> m;
double r;
vector<double> Rs;
while (m--)
{
cin >> r;
Rs.push_back(r);
}
sort(Rs.begin(), Rs.end(), cmp);
/*vector<double>::iterator it;
for (it = Rs.begin(); it != Rs.end(); it++)
{
cout << *it << " ";
}*/
double sum = 0;
int num;
for (num = 0; num != Rs.size(); num++)
{
if (sum > len)break;
sum += Lenth(Rs[num], wid);
}
cout << num << endl;
}
return 0;
}