NYOJ - 6:喷水装置(一)

喷水装置(一)

来源:NYOJ

标签:排序,贪心算法

参考资料:

相似题目:https://blog.csdn.net/wingrez/article/details/82012429

题目

现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0

输入

第一行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

解题思路

请见另一篇博客:https://blog.csdn.net/wingrez/article/details/82012429

参考代码

#include
#include
#include
#define MAXN 605
using namespace std;
double arr[MAXN];
bool cmp(double a,double b){
	return a>b;
}
int main(){
	int m;
	scanf("%d",&m);
	while(m--){
		int n;
		scanf("%d",&n);
		int i,j;
		for(i=0;i<n;i++)
			scanf("%lf",&arr[i]);
		sort(arr,arr+n,cmp);
		int ans=0;
		double len=0;
		for(i=0;i<n;i++){
			if(arr[i]>1){
				len=len+(sqrt(arr[i]*arr[i]-1))*2;
				ans++;
				if(len>=20) break;
			}
			else break;
		}
		printf("%d\n",ans);
	}
	return 0;
}

你可能感兴趣的:(【记录】算法题解)