题目大意:输入n,l,w.分别代表有n个喷水装置,草地长为L,宽为W;接下来n行,每行两个数,a,r,分别代表喷水装置在草地中的横坐标,和喷水半径。喷水装置的纵坐标都是草地的正中央。求用最少的喷水装置洒水,覆盖所有的草地,若不能输出-1,能则输出所需的最少的喷水装置数目。

题目解析:排序+贪心,恶心的是卡了精度!输入时计算出所有喷水装置能覆盖的横坐标的范围。已知圆的半径和弦长,则可以求出圆心到弦长的距离s,用圆心的位置a-s则可得当前喷水装置能覆盖的最左边的的草地,a+s,表示能覆盖的最右边的草地坐标。然后以最左边的覆盖范围为依据排序,然后贪心满足条件的能覆盖到最右边的喷水装置。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define MAX 100010
typedef struct node
{double L,R;
}node;
node map[MAX];
const double INF=10e-9;
int n,l,w;
int cmp(const void *aa,const void *bb)
{node *a=(node *)aa;node *b=(node *)bb;if (a->L!=b->L)return a->L > b->L ?1:-1;return a->R > b->R ?1:-1;
}
int main()
{while (scanf("%d%d%d",&n,&l,&w)!=EOF){int i,j=0,a,r,m=0;double ans,cnt;      for (i=0;i<n;i++){scanf("%d%d",&a,&r);if (r*2>w){ans=sqrt((double)r*r-(double)w*w/4.0);map[j].L=(double)a-ans;map[j++].R=(double)a+ans;                 }}qsort(map,j,sizeof(node),cmp);cnt=ans=0.0;for (i=0;i<j;i++){int flag=0,tot=0;cnt=ans;while (map[i].L-cnt<INF&&i<j){if (map[i].R>ans){ans=map[i].R; tot=1;                }        i++;flag=1;  }if (flag){i--;}if (tot)m++;if (ans>l)break;}if (ans>=l)printf("%d\n",m);elseprintf("-1\n"); }return 0;
}

uva10382 - Watering Grass相关推荐

  1. UVA10382 - Watering Grass 题解

    原题链接 Online Judge: 10382 - Watering Grass Virtual Judge: Watering Grass - UVA 10382 洛谷:UVA10382 Wate ...

  2. UVa-10382 Watering Grass **

    /* * Uva-10382-Watering Grass.cpp * 特别注意精度..(感觉这道题的判题有问题,开始怎么交都WA,,过两天什么都没改,再交就AC了 , 汗.. * * 详细代码注释: ...

  3. UVa10382 - Watering Grass(贪心算法)

    问题:给出一个长为l,宽为w的绿化带,n个喷水装置及其对就位置x和影响半径r.问最少需要多少个喷水装置能全覆盖此绿化带 思路:首先要计算喷水装置可以覆盖的区间,如果喷水装置的影响半径小于等于w/2,是 ...

  4. UVA-10382 Watering Grass

    题意:有一个长方形草坪,长为l,宽为w,在它的水平中心线上可以安装n个喷水器来为草坪浇水,每个喷水器能够灌溉的范围是以该喷水器为中心的半径为r的圆.我们要灌溉整个草坪,问你最少需要的喷水器数. 题解: ...

  5. UVa 10382 - Watering Grass

    链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&pa ...

  6. Watering Grass——UVA10382

    题目 n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each s ...

  7. Watering Grass UUV 1038 贪心

    问题: n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each ...

  8. Watering Grass UVA - 10382 贪心

    问题 https://vjudge.net/problem/UVA-10382 分析 将一个点的覆盖范围看作是一个长方形,舍弃弓形区域,变成区间覆盖问题,用贪心法 注意:bb-ww/4有可能小于0,要 ...

  9. *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)

    题干: 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数,如果无论如何都不能覆 ...

最新文章

  1. Linux device tree 简要笔记
  2. Python - 移除List中重复项的五种常用方法
  3. Weblogic部署项目过程中的一些问题
  4. Java基础:IO流之File类
  5. java propertysource_[spring] @PropertySource
  6. QT学习:基于UDP的网络广播程序
  7. 算法——海量数据(5%)
  8. Github Action 快速构建 Electron 应用
  9. kubernetes ui 搭建
  10. java .item,javabb-javaitem-cloud
  11. Develop Internationalized Software
  12. java项目的事务怎么处理_java实际项目中如何处理分布式事务的
  13. 无刘海的iPhone 12,苹果打算用这个方案来实现?
  14. EmbeddedBrowser
  15. CodeSmith 创建Ado.Net自定义模版(一)
  16. UIPickerView的使用
  17. 我的开源GIS解决方案之路
  18. 架构设计基础设施保障(laaS 云虚拟使用 存储 网络 DNS运用 CDN剖析和运用)
  19. 人人商城开启整点秒杀功能
  20. 如何用 SSH 登录 Kindle 系统

热门文章

  1. 福师《计算机应用基础》期末考试,福师1009考试批次《计算机应用基础》考试复习题三 附答案...
  2. 全闪存数据中心首次落地后,银行业数字化冲破“天花板”
  3. opencv报错—error C2872: ACCESS_MASK: 不明确的符号
  4. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)
  5. 硬盘格式化数据恢复(图文教程)
  6. 对于超大型SQL SERVER数据库执行DBCC操作
  7. 基于GUI的AWT,Swing写的一个餐厅点菜系统
  8. DASCTF Oct X 吉林工师 欢迎来到魔法世界 部分wp
  9. 市盈率指标详解及相关文献概述
  10. 【SPI总线常见错误】