http://acm.nyist.net/JudgeOnline/problem.php?pid=6

java1:

主要用到贪心算法。
由题目很明显可以得出只要是半径大于1的喷水装置都是可以被选中的,每个装置能够湿润草坪的有效长度为2*sqrt(r*r-1);题目要我们求的是要选择尽量少的的喷水装置,所以可以贪心一下,先按半径从大到小的顺序排序一下,然后for()或while()一下就搞定。

import java.util.*;
public class Main {public static void main(String args[]) {Scanner cin = new Scanner(System.in);int count,a;       count=cin.nextInt();       while (count>0) {a = cin.nextInt(); List<Double> arrs=new ArrayList<Double>();double sum=0;int result=0;for(int i=0;i<a;i++){arrs.add(cin.nextDouble());}Collections.sort(arrs,new Comparator<Double>() {public int compare(Double o1, Double o2) {                                  //不能直接相减丢失精度。//System.out.println("a2="+o2+",a1="+o1+",o3="+(o2-o1));                 if(o2>o1){return 1;}else{return -1;}}});for(int j=0;j<arrs.size();j++){double val=arrs.get(j);if(val<=1.0){//已经要使用1了break;}   if(sum>=20.0){break;}else{sum+=2*(double)(Math.sqrt(val*val-1));result++;}}System.out.println(result);count--;}cin.close();             }
}

java2:

乍起来有点不知如何下手, 其实只要算出 这个草地的斜边长度, 然后只要全部圆的半径合大于等于这个斜边长度的一半就可以了(但是必须丢弃半径小于等于1的装置,在横中线上无论怎么放,它是无法完全覆盖草地的)。

import java.util.*;
public class Main {public static void main(String args[]) {Scanner cin = new Scanner(System.in);int count,a;count=cin.nextInt();double len = Math.sqrt(20*20 + 2*2)/2;  while (count>0) {a = cin.nextInt(); List<Double> arrs=new ArrayList<Double>();double sum=0;for(int i=0;i<a;i++){arrs.add(cin.nextDouble());}Collections.sort(arrs,new Comparator<Double>() {public int compare(Double o1, Double o2) {if(o2>o1){return 1;}else{return -1;}}});int j=0;for( j=0;j<arrs.size();++j){double val=arrs.get(j);if(val<=1.0){//已经要使用1了break;}         sum+=val;         if(sum>=len){break;}}System.out.println(j+1);count--;}cin.close();}
}

最优答案:

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>
#include<cmath>
using namespace std;double Length(double R,double b)
{return 2*sqrt(R*R-b*b/4);
}
int main()
{const double l=20,w=2;int n;cin>>n;while(n--){int m;cin>>m;double R;vector<double> Rs;while(m--){cin>>R;Rs.push_back(R);}sort(Rs.begin(),Rs.end(),greater<double>());double sum=0;int i;for(i=0;i!=Rs.size();i++){if (sum>l) break;sum+=Length(Rs[i],w);}cout<<i<<endl;}
}        

NYOJ6 之喷水装置(一)相关推荐

  1. NYOJ-6:喷水装置(一)

    描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1& ...

  2. 贪心算法之——喷水装置一(nyoj6)

    描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1& ...

  3. NYOJ6——喷水装置(一)

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3  描述:现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它 ...

  4. NYOJ6——喷水装置(一)(贪心)

    题目描述: 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i ...

  5. NYOJ 12 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...

  6. 问题 A: 喷水装置(一)

    题目描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置, 每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i ...

  7. UVA10382喷水装置

    题意:       给你一个矩形的空地,然后有一些圆形的喷水装置,每个装置的圆心都在矩形宽的中间位置,然偶给你每个矩形的圆心位置和半径,问你最少多少个喷水装置可以把矩形的所有编辑都覆盖上. 思路:   ...

  8. 算法打卡39:喷水装置

    365算法每日学计划 39打卡: 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<ri<15)的圆 ...

  9. 贪心算法之——喷水装置二(nyoj12)

    题目描述: 喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000) ...

最新文章

  1. 中国电子信息产业发展研究院主办的2018中国软件大会上大快搜索“又双叒叕”获奖了...
  2. python pytz 获取指定时区的时间
  3. jdbc template 学习总结
  4. Hough 检测直线
  5. SM37作业条目的存储表
  6. dotNET Core 3.X 使用 Web API
  7. java中已定义类型car_Java 8 习惯用语(8):Java 知道您的类型
  8. openssh修复(CVE-2017-15906)(CVE-2018-15919)这两个漏洞
  9. 小甲鱼python课后题简书_【Python爬虫】-笨办法学 Python 习题01-10
  10. jquery怎么判断不同的字显示不同的颜色_不知道怎么封装代码?看看这几种设计模式吧!...
  11. win10无法装载iso文件_装载Win10 ISO镜像文件的具体方法
  12. 深入理解高级数据结构之红黑树
  13. 爬虫实例 8684公交网-太原公交线路信息
  14. 在数据库使用期间创建OMF(Oracle Managed Files,Oracle管理的文件)
  15. C语言|鼠标点击开始
  16. Rainbow: 结合深度强化学习的改进
  17. unix进程间的通信方式
  18. Pytorch预训练模型加载
  19. c语言约会,初次约会的十个话题 这么和女生聊天保准不冷场
  20. 好书《无毒一身轻—21天改变体质》- 总结

热门文章

  1. 小学四年级上册中的计算机,小学四年级上册信息技术.doc
  2. [Errno 14] curl#37 - Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-nux.ro 解决
  3. php一年节日,自动获取节日日期并显示灯笼效果的PHP源码
  4. 制作QQ登录界面(UI版)
  5. Error running ‘Tomcat 8.5.51‘: Address localhost:4099 is already in usebaoc
  6. C++ 复数类编写小练习
  7. 单片机c语言开发实验心得,在单片机C语言编程中的心得体会
  8. 安装linux7 没有图形化界面,CentOs7 安装后无图形界面,安装图形界面(yum groupinstall GNOME Desktop Graphical Administration ...
  9. MERR-04B、MERR-03A、MERR-03B叠加式泄压控制阀控制器
  10. L1正则化方法(拉格朗日)和L2(岭回归)正则化方法的不同