• 喷水装置(一)(南阳oj6)(简单贪心)


    喷水装置(一)

    时间限制: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)。
    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    bool cmp(double x,double y)
    {
    	return x>y;
    }
    int main()
    {
    	int test,i,j,n;
    	double a[610],t;
    	scanf("%d",&test);
    	while(test--)
    	{
    		scanf("%d",&n);
    		for(i=0,j=0;i<n;i++)
    		{
    			scanf("%lf",&t);
    			if(t>=1)  //假设输入的装置半径小于1。则不存储。 
    			   a[j++]=t;
    		}
    		double sum=0,k;
    		sort(a,a+n,cmp);
    		for(i=0;i<n;i++)
    		{
    			if(sum<20){
    			   k=2*sqrt(a[i]*a[i]-1);
    			   sum+=k;}
    			else
    		       break;
    		}
    		printf("%d
    ",i);
    	}
    	return 0;
    }
  • 相关阅读:
    如何计算时间复杂度
    注意线程
    java中一个类要当作线程来使用有两种方法
    压缩和解压
    init [0123456]
    linux文件目录
    为什么使用combiner?【Hadoop】
    JAVA标识符
    关键字:java
    转 java 中int String类型转换
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6867173.html
Copyright © 2020-2023  润新知