nyoj6噴水裝置(一)

噴水裝置(一)

時間限制: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
解題思路:
首先每個噴水口最大覆蓋長度爲:2*sqrt(a[i]*a[i]-1

其次把噴水口半徑從大到小排列,從最大的開始取就可以

   題目說是完全覆蓋,所以半徑小於1的不能用

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int cmp(const void *a,const void *b)

{

    return *(int *)b-*(int *)a;

}
int main()
{
	int t,i,j,k,num;
	
	float sum,s,a[600];
	
	scanf("%d",&t);
	
	while(t--)
	{
			 scanf("%d",&num);

             for(i=0;i<num;i++)

            scanf("%f",&a[i]);

             qsort(a,num,sizeof(a[0]),cmp);

              sum=0.0;k=0;

              for(j=0;j<num;j++)

             {



               s=2*sqrt(a[j]*a[j]-1);  

               sum+=s;

                k++;

                if(sum>=20.0)

                break;

        }
			
		      printf("%d\n",k);
	}
			
				return 0;
}


發佈了25 篇原創文章 · 獲贊 8 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章