喷水装置(一)

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming


喷水装置(一)

时间限制: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


 解题思路:

圆型盘 长度是20 要完全覆盖,覆盖宽度是 2*sqrt(r^2-1)  


按照贪心原则:


从最大的宽度开始排列,最大的开始进行,依次,即可得到最小的喷水装置的个数



#include<iostream>
#include<cmath>
using namespace std;
double a[610];
int main(){
    int m ;
    cin>>m;
    while(m--){
      int n;
      cin>>n;
      for(int i = 0 ; i < n; i++)
      {
            cin>>a[i];
      }
      //对其进行排序冒泡排序 大到小
      for(int i = 0;i < n-1; i++){
        for(int j = i+1; j< n; j++){
            double temp;
            if(a[i] < a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
      }
      double length = 0;

      //从最大开始数
      for(int i = 0; i < n ;i++)
      {
           length += 2*sqrt(a[i]*a[i]-1);
           if(length >= 20){
             cout<<i+1<<endl;
             break;
           }
      }
    }


   return 0;
}








wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值