暑期集训之喷水装置一
来源:互联网 发布:好玩的java源代码 编辑:程序博客网 时间:2024/05/17 23:58
喷水装置(一)
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
- 输入
- 第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。 - 输出
- 输出所用装置的个数
- 样例输入
252 3.2 4 4.5 6 101 2 3 1 2 1.2 3 1.1 1 2
- 样例输出
25
- 来源
- [苗栋栋]原创
- 上传者
- 苗栋栋
一道经典贪心题0.0,貌似现在做的都是经典题,管他呢,这道题和前面那到喷水装置二基本差不多,如果你会做二的话这道题也就不在话下了,因为啥都告诉你了,你只需要从最大半径开始,每加一下,装置数量加一,值得注意的是这道题的意思是一定成功,所以不存在喷水装置二中无法喷满草坪的情况,当然就算如此,我们也得把那些喷水半径小于1的删除掉,因为小于一意味着这个装置是绝对喷不满草坪的,所以,要说的就这么多,代码如下,也就不注释了,非常容易理解:
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;double gougu(double a){ double m; m=sqrt(a*a-1); m=m*2;return m;}bool cmp(double a,double b){return a>b;}int main(){int m;int n;double p[605];int ans;double b;scanf("%d",&n);while(n--){ scanf("%d",&m);for(int i=0;i<m;i++){scanf("%lf",&p[i]);}sort(p,p+m,cmp);b=0;ans=0;for(int i=0;i<m;i++){ ans++;b=b+gougu(p[i]);if(b>=20)break;}printf("%d\n",ans);}return 0; }
阅读全文
0 0
- 暑期集训之喷水装置一
- 暑期集训之喷水装置(二)
- NYOJ6 之喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- 喷水装置(一)
- C++学习笔记之数组
- hdu3072 Intelligence System【强连通】
- jQuery添加节点___例_添加表格
- PAT 1069微博转发抽奖
- Ceres-Solver学习笔记(3)
- 暑期集训之喷水装置一
- 【BZOJ】4554 [Tjoi2016&Heoi2016]游戏 二分图
- NYOJ 144 小柯的烦恼
- ssh三大框架整合时struts2遇到的简单又很容易忽视的问题
- main函数参数_可变参数
- HDU 2017多校联赛-1012 Balala Power!
- 程序设计思维
- 给时间定一个目标
- 最大公约数(欧几里得算法)