喷水装置 ACM题目 京东16招聘编程题(贪心算法)
2015-09-26 16:29
477 查看
原文地址:点击打开链接
描述:现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0
< Ri < 15)的圆被湿润,这有充足的喷水装置i(1 < i < 600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
输入:第一行m表示有m组测试数据
每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。
输出:输出所用装置的个数
样例输入
样例输出
描述:现有一块草坪,长为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代码:
#include <iostream> #include <cmath> #include <vector> #include <algorithm> using namespace std; int main() { double length = sqrt(20 * 20 + 2 * 2)/2; int k; cin >> k; for (int i = 0; i < k; ++i) { int n; double temp; vector<double> ivec; cin >> n; for (int j = 0; j < n; ++j) { cin >> temp; ivec.push_back(temp); } sort(ivec.begin(), ivec.end()); double sum = 0; int num=0; for (auto r = --ivec.end(); r >= ivec.begin(); --r) { sum += *r; num++; if (sum >= length) break; } cout << num<<endl; } }
相关文章推荐
- LeetCode|Same Tree-java
- LeetCode|Maximum Depth of Binary Tree-java
- test8.3
- LeetCode|Balanced Binary Tree-java
- LeetCode|Path Sum-java
- java中static关键字的理解
- LeetCode|Pascal's Triangle-java
- struts1工作原理
- Qt Virtual Keyboard
- C语言的static
- Java中finalize()用法
- java数组和向量
- C++ traits编程方法
- 用python发布一条微博
- 如何解决ASP.NET新增时多字段取值的问题
- C#中的事务用法实例分析
- Java之内存分析和String对象
- google-analytics.com
- GO 学习笔记 (一)
- java中代理模式以及new和newInatance()的区别