NYOJ-6-喷水装置(一)

喷水装置(一)
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
现有一块草坪,长为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
 
 

会用到sort排序函数
sort函数用法:http://blog.csdn.net/qq_32680617/article/details/50629215
 
做题时注意,样例中的半径是浮点数!!
其他没什么坑的,典型贪心的思想。
 

#include
#include
#include
#include
using namespace std;
int cmp(double x,double y)
{
    return x>y;//sort函数降序排列
}
int main()
{
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int n;//半径的总数量
        int num=0;//记录需要用到的半径数量
        double length=20.0;//由于样例中半径是浮点数,所以草坪长度也要定义为浮点数
        double a[601];//存储输入的半径,注意半径类型为double
        scanf("%d",&n);
        for(int i=0; iscanf("%lf",&a[i]);
        sort(a,a+n,cmp);//半径降序排列
        for(int i=0; iif(a[i]>1&&length>0)//如果半径大于1且剩余草坪长度大于0
            {
                length=length-2*sqrt(a[i]*a[i]-1);//sqrt是开平方函数
                num++;
            }
            else
            {
                printf("%d\n",num);
                break;
            }
        }
    }
    return 0;
}

你可能感兴趣的:(贪心算法,贪心算法,sort排序)