1. 程式人生 > >NYOJ:噴水裝置(一)

NYOJ:噴水裝置(一)

http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=6

描述

現有一塊草坪,長為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<stdio.h>
#include<math.h>
#include<algorithm>
#define N 660
using namespace std;
double a[N];
int main()
{
	int t,i,n,ans;
	double m;
	scanf("%d",&t);
	while(t--)
	{
		ans=0;
		scanf("%d",&n);
		for(i=0;i<n;i++)
			scanf("%lf",&a[i]);
		sort(a,a+n);
		m=20.0;
		i--;
		while(m>0)
		{
			m-=2*sqrt(a[i]*a[i]-1);
			ans++;
			i--;
		}
		printf("%d\n",ans);
	}
	return 0;
}