长L米,宽W米的草坪里装有N  个浇灌喷头。每个喷头都装在草坪中心线上(离两边各 W/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。

请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

输入格式

输入包含若干组测试数据。

第一行一个整数 T表示数据组数;

每组数据的第一行是整数N 、L 和W ;

接下来的 N 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。

输出格式

对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出 -1 。

样例

样例输入

3
8 20 2
5 3
4 1
1 2
7 2
10 2
13 3
16 2
19 4
3 10 1
3 5
9 3
6 1
3 10 1
5 3
1 1
9 1

样例输出

6
2
-1

数据范围与提示

对于100%  的数据N<=15000,

___________________________________________

经典的贪心题目。

贪心的内容:肯定覆盖的越长越好。但是不能按长度排序,而应该从头开始选,同样满足条件的情况下选长的。

方法:首先按照左边界排序,能够覆盖左边界的线段中选择向右覆盖的距离(也就是右边界)最远的,这是需要覆盖的图形的新的左边界就变成的这个“右边界”。然后继续进行,知道全部覆盖。如果中间有区间无法覆盖就输出-1.

题目并不难,但是做的过程中忽略了一点,导致出现错误,那就是有的装置的喷洒半径无法到达草坪的宽度,这种装置可以忽略。

___________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=15010;
4 int n,nn,t;
5 double l,w;
6 struct node
7 {
8 double bg,ed;
9 }pt[maxn];
10 bool cmp(node x,node y)
11 {
12 return x.bg<y.bg;
13 }
14 int ans;
15 double rt;
16 int main()
17 {
18 scanf("%d",&t);
19 while(t--)
20 {
21 scanf("%d%lf%lf",&nn,&l,&w);
22 w/=2;
23 n=0;
24 for(int i=1;i<=nn;++i)
25 {
26 double p,r;
27 scanf("%lf%lf",&p,&r);
28 if(r<=w) continue;
29 ++n;
30 double tmp=sqrt(r*r-w*w);
31 pt[n].bg=p-tmp;pt[n].ed=p+tmp;
32 }
33 sort(pt+1,pt+1+n,cmp);
34 ans=0;rt=0;
35 int cur=1;
36 double tmp=0;
37 bool bz;
38 while(cur<=n)
39 {
40 bz=0;
41 while(cur<=n && pt[cur].bg<=rt)
42 {
43 if(pt[cur].ed>rt)
44 {
45 bz=1;
46 tmp=max(tmp,pt[cur].ed);
47 }
48 ++cur;
49 }
50
51 if(bz==0||tmp==rt)
52 {
53 puts("-1");
54 break;
55 }
56 ans++,rt=tmp;
57 if(rt>=l)break;
58 }
59 if(rt>l)printf("%d\n",ans);
60
61 }
62 return 0;
63 }

loj10002喷水装置的更多相关文章

  1. ACM 喷水装置(二)

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

  2. ACM 喷水装置(一)

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

  3. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  4. nyoj 6 喷水装置(一)

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

  5. 喷水装置(一)--nyoj题目6

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

  6. NYOJ 12 喷水装置(二)

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

  7. 【思维】【水】 南阳oj 喷水装置(一)

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

  8. NYOJ 12:喷水装置(二)(贪心,区间覆盖问题)

    12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...

  9. NYOJ 6:喷水装置(一)(贪心)

    6-喷水装置(一) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:68 提交数:111 难度:3 题目描述: 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水 ...

随机推荐

  1. 加班申请单flowable中

    /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source ...

  2. Vue 面试题总结

    1. Vue 框架的优点是什么? (1)轻量级框架:只关注视图层,大小只有几十Kb:     (2)简单易学:文档通顺清晰,语法简单:     (3)数据双向绑定,数据视图结构分离,仅需操作数据即可完 ...

  3. 记一次Jquery学习引发的学习思考

    学习廖雪峰Jquery的教程关于表单的操作时,被最后的习题给困住了,在一番思索后无奈地决定去看博客评论下的答案,却发现自己看不懂,遂以为是对Jquery的了解还不够深,于是便在网上疯狂搜索关于Jque ...

  4. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

  5. Mybatis-plus的使用步骤

    Mybatis-plus的简单使用步骤 花开堪折直需折,莫待无花空折枝 导入依赖 <dependency> <groupId>org.projectlombok</gro ...

  6. Mysql中的语句优化

    1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...

  7. WPF学习笔记01_XAML之简介

    简介 XAML (发音"zammel" 咋么儿),用于实例化.NET对象的标记语言,主要用于构造WPF的用户界面.类似html标记语言. 通过XAML,程序员可以用代码的方式对界面 ...

  8. springboot源码解析-管中窥豹系列之Initializer(四)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  9. 算法历练之路——传纸条(JAVA)

    传纸条 时间限制: 1Sec 内存限制: 128MB 提交: 36 解决: 16 题目描述小渊和小轩是好朋友也是同班同学,他们在一起 总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  10. .netcore利用perf分析高cpu使用率

    目录 一 在宿主机运行perf 二 容器内安装perf 1,重新构建镜像 2,下载火焰图生成脚本 3,安装linux-perf 三 CPU占用分析 1,perf record捕获进程 2,生成火焰图 ...