uva10382 - Watering Grass
题目大意:输入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相关推荐
- UVA10382 - Watering Grass 题解
原题链接 Online Judge: 10382 - Watering Grass Virtual Judge: Watering Grass - UVA 10382 洛谷:UVA10382 Wate ...
- UVa-10382 Watering Grass **
/* * Uva-10382-Watering Grass.cpp * 特别注意精度..(感觉这道题的判题有问题,开始怎么交都WA,,过两天什么都没改,再交就AC了 , 汗.. * * 详细代码注释: ...
- UVa10382 - Watering Grass(贪心算法)
问题:给出一个长为l,宽为w的绿化带,n个喷水装置及其对就位置x和影响半径r.问最少需要多少个喷水装置能全覆盖此绿化带 思路:首先要计算喷水装置可以覆盖的区间,如果喷水装置的影响半径小于等于w/2,是 ...
- UVA-10382 Watering Grass
题意:有一个长方形草坪,长为l,宽为w,在它的水平中心线上可以安装n个喷水器来为草坪浇水,每个喷水器能够灌溉的范围是以该喷水器为中心的半径为r的圆.我们要灌溉整个草坪,问你最少需要的喷水器数. 题解: ...
- UVa 10382 - Watering Grass
链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&pa ...
- Watering Grass——UVA10382
题目 n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each s ...
- Watering Grass UUV 1038 贪心
问题: n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each ...
- Watering Grass UVA - 10382 贪心
问题 https://vjudge.net/problem/UVA-10382 分析 将一个点的覆盖范围看作是一个长方形,舍弃弓形区域,变成区间覆盖问题,用贪心法 注意:bb-ww/4有可能小于0,要 ...
- *【UVA - 10382】Watering Grass(贪心,区间覆盖问题,思维)
题干: 题目大意: 有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆.求出最少需要的喷水装置个数,如果无论如何都不能覆 ...
最新文章
- Linux device tree 简要笔记
- Python - 移除List中重复项的五种常用方法
- Weblogic部署项目过程中的一些问题
- Java基础:IO流之File类
- java propertysource_[spring] @PropertySource
- QT学习:基于UDP的网络广播程序
- 算法——海量数据(5%)
- Github Action 快速构建 Electron 应用
- kubernetes ui 搭建
- java .item,javabb-javaitem-cloud
- Develop Internationalized Software
- java项目的事务怎么处理_java实际项目中如何处理分布式事务的
- 无刘海的iPhone 12,苹果打算用这个方案来实现?
- EmbeddedBrowser
- CodeSmith 创建Ado.Net自定义模版(一)
- UIPickerView的使用
- 我的开源GIS解决方案之路
- 架构设计基础设施保障(laaS 云虚拟使用 存储 网络 DNS运用 CDN剖析和运用)
- 人人商城开启整点秒杀功能
- 如何用 SSH 登录 Kindle 系统
热门文章
- 福师《计算机应用基础》期末考试,福师1009考试批次《计算机应用基础》考试复习题三 附答案...
- 全闪存数据中心首次落地后,银行业数字化冲破“天花板”
- opencv报错—error C2872: ACCESS_MASK: 不明确的符号
- 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)
- 硬盘格式化数据恢复(图文教程)
- 对于超大型SQL SERVER数据库执行DBCC操作
- 基于GUI的AWT,Swing写的一个餐厅点菜系统
- DASCTF Oct X 吉林工师 欢迎来到魔法世界 部分wp
- 市盈率指标详解及相关文献概述
- 【SPI总线常见错误】