题意:有一块草坪,这块草坪长l 米,宽 w 米,草坪有一些喷头,每个喷头在横坐标为 p 处,每个喷头的纵坐标都是(w/2) ,并且喷头的洒水范围是一个以喷头为圆心,半径为 r 米的圆。每次最少需要打开多少个喷头来给草坪洒水,并且草坪各处都能被洒到,不行输出-1

思路:这是一道区间覆盖(贪心)题:

有一堆区间 l1, r1;l2, r2...ln,rn,问你最少用几个能覆盖0~P的长度

那么我们先按照L升序排序,far是目前所能找到的最远处,R是上一次查询所能找到的最远处,每次查询我们都要找后面满足li <= R的点,记录far,当这一轮查找完毕后R = far。显然R初始化应为最左端的点(本题为0)。

比如区间为[-1,4],[0,2],[0,1],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8],覆盖区域为0~8

第一步选择[-1,4],[0,2],[0,1]中最远的[-1,4] ,那么下一步能够选择的有[2,6],[3,5],[3,6],[3,7],由于7最大,所以下一步选择[3,7],最后一步只能选择[6,8]

这一题注意筛选 r < w 情况。

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = + ;
const int MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
struct node{
double l, r;
bool operator < (const node x) const{
return l < x.l;
}
}a[maxn];
int n;
double l, w;
int solve(){
sort(a + , a + n + );
double far = , R = ;
int ans = , pos = ;
while(pos <= n){
if(far >= l) break;
if(a[pos].l <= R){
ans++;
while(a[pos].l <= R && pos <= n){
far = max(far, a[pos].r);
pos++;
}
R = far;
}
else break;
}
if(far >= l) return ans;
return -;
}
int main(){
while(~scanf("%d%lf%lf", &n, &l, &w)){
w /= 2.0;
for(int i = ; i <= n; i++){
double p, r, del;
scanf("%lf%lf", &p, &r);
if(r >= w){
double s = sqrt(r * r - w * w);
a[i].l = p - s;
a[i].r = p + s;
}
else{
i--;
n--;
}
}
printf("%d\n", solve());
}
return ;
}

最新文章

  1. Spark - RDD(弹性分布式数据集)
  2. vim中设置Python自动补全
  3. 【HDOJ】1504 Disk Tree
  4. 了解php面向对象
  5. What is tradebit?
  6. ViewSwitcher的功能与用法
  7. Java多线程与并发模型之锁
  8. JavaScript 跨域之 POST 实现。
  9. Golang 交叉编译 window/linux 文件
  10. Linq to SQL -- 入门篇
  11. Bresenham算法的实现思路
  12. ios怎么让状态栏颜色和导航栏背景图片颜色一样
  13. 搭建React项目(一):在网页中使用
  14. Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)
  15. HTML5实现简单圆周运动示例
  16. const关键字对C++成员函数的修饰
  17. mysql-8 alter命令
  18. PHP常用函数归类【持续整理】
  19. UTF-8和GBK编码之间的区别(页面编码、数据库编码区别)以及在实际项目中的应用
  20. rsync进行不同服务器之间的数据同步

热门文章

  1. 使用淘宝npm镜像
  2. JavaScript循环和数组常用操作
  3. 【Oozie学习之一】Oozie
  4. 输入输出无依赖型函数的GroovySpock单测模板的自动生成工具(上)
  5. linux常用命令:touch 命令
  6. (Review cs231n) Backpropagation and Neural Network
  7. node.js学习(一)
  8. goldengate 12.3 实现mysql数据及DDL实时同步
  9. ucos ii 46个系统API函数解析
  10. kivy __init__() got an unexpected keyword argument &#39;__no_builder&#39; Kivy