喷水~~~~~~~~~

n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each sprinkler
is installed at the horizontal center line of the strip. For each sprinkler we are given its position as the
distance from the left end of the center line and its radius of operation.
What is the minimum number of sprinklers to turn on in order to water the entire strip of grass?

Input
Input consists of a number of cases. The first line for each case contains integer numbers n, l and w
with n ≤ 10000. The next n lines contain two integers giving the position of a sprinkler and its radius
of operation. (The picture above illustrates the first case from the sample input.)

Output
For each test case output the minimum number of sprinklers needed to water the entire strip of grass.
If it is impossible to water the entire strip output ‘-1’.

Sample Input
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

Sample Output
6
2
-1

思路:

先找区间,通过三角形跟圆的结合。

然后进行区间排序,找区间右边尽量大的区间,直到覆盖整个草坪。

源代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<string>
 6 #include<cstdio>
 7 using namespace std;
 8 #define maxn 100005
 9 struct sprinkler{
10     double left;
11     double right;
12     bool operator <(const sprinkler&a)const
13     {
14         return left < a.left;
15     }
16 }arr[maxn];
17 int main()
18 {
19     int n;
20     double l, w;
21     while (cin >> n >> l >> w)
22     {
23         double p, r;
24         int Index=0;
25         int flag = 0;
26         for (int i = 0; i < n; i++)
27         {
28             cin >> p >> r;
29             if (r <= w / 2.0)
30                 continue;
31                 arr[Index].left = (double)p - sqrt(r*r - w*w / 4.0);
32                 arr[Index++].right = (double)p + sqrt(r*r - w*w / 4.0);                      //算区间
33
34         }
35         sort(arr, arr + Index);
36         int count = 0;
37         double le=0,cur = 0;
38         int j;
39         if (arr[0].left <=0)
40         {
41             int i = 0;
42           while (i < Index)
43         {
44             j = i;
45             while (j < Index&&arr[j].left <=le)
46             {
47                 if (arr[j].right > cur)
48                     cur = arr[j].right;     //找区间右边大的
49                     j++;
50             }
51                 if (j == i)break;    //i=j相当于没有进入循环,也就是都不满足
52                 ++count;            //满足就计数加加
53                 le = cur;            //起点更新
54                 i=j;
55
56                 if (cur >= l)      //全部覆盖
57                 {
58                     flag = 1;
59                     break;
60                 }
61
62             }
63         }
64         if (flag)
65             cout << count << endl;
66
67         else
68             cout << "-1" << endl;
69
70
71     }
72     return 0;
73
74 }
时间: 2024-12-17 04:36:30

喷水~~~~~~~~~的相关文章

[OpenGL] 简单二维粒子系统——烟花,喷水,落叶

参考代码:http://download.csdn.net/detail/blue6333589/6785389 在这个代码的基础上扩展了二维粒子系统的框架,该系统由一个发射器类和一个粒子类组成,作为编程练习而言,我们只实现了最基本的粒子系统功能,但是已经可以做出一些效果了. 在这里,通过调节参数给出了在这个框架下烟花.喷水.落叶的代码,参考代码实现的是飘雪:只要在物理参数模拟和贴图选择上做得足够好,也可以实现火焰.爆炸等效果. 发射器 其中发射器类支持从点发射和从直线发射,暂时不支持曲线(编程

77、自动喷水灭火系统的巡查内容

根据现行国家标准<建筑消防设施的维护管理>,自动喷水灭火系统巡查内容主要包括: 1.喷头外观及周围障碍物.保护面积等: 2.报警阀组外观.报警阀组检测装置状态.排水设施状况等: 3.充气设备.排气装置及控制装置.火灾探测传动.液(气)动传动及其控制装置.现场手动控制装置等外观.运行状况: 4.系统末端试水装置.楼层试水阀及其现场环境状态.压力检测情况等: 5.系统用电设备的电源及其供电情况: 原文地址:https://www.cnblogs.com/wf2010517141/p/1058412

防水刷漆小窍门

我们都知道墙面涂料的选择是家装中很重要的环节,只要选择一款好的墙面涂料进行刷漆,对于顺利进行过程有着不容忽视的作用. 1.墙面处理 一般装修墙面时首先要把普通基面处理平整,对于比较疏松的底材必须进行界面处理.预制板.板缝需专业密封处理后再进行施工.墙面比较大的孔洞以及裂缝应先用砂浆修补再用油漆处理.对这些小细节装修中万万不可忽视,而夏季装修更要关注混凝土的含水量,防止出现后期墙面气泡的现象. 2.底材处理 墙面基面处理完后,下面就是处理底材了.涂料均匀涂刷至底材,重新至少2次或多次,防水层厚度大

一发入魂:论射的技巧

射水鱼:这是特别的喷水技巧! 我们对狙击手往往有着这样的印象:他们冷酷.沉稳.一击制敌,可以卧在草丛里几个小时一动不动,只为扣动扳机那一刹那的绝代风华.在东南亚的水域中也出没 着这样一群狙击高手,它们卓绝的技艺甚至更胜人类,这些神射手就是射水鱼(Toxotes jaculatrix).近日,来自德国拜罗伊特大学(University of Bayreuth)的斯特凡·舒斯特(Stefan Schuster)为我们揭开了射水鱼每一次精确射击背后的奥秘,研究论文发表在<当代生物学>(Current

杭州软装设计师必知灯光知识-灯光构成在室内设计中的运用

与办公室内环境相比,居室中灯光多为暖调,一般以白炽为主,居室给光应注意均匀柔和,然后再根据居室的不同功能具体布置光源,尽量减少荧光灯的使用,荧光灯光线偏冷,易破坏室内温馨气氛.所以,灯光的合理和谐的应用会为整个室内设计起到锦上添花的作用,灯光运用的不恰当,会造成成个设计的失败.今天,杭州五色光软装就给大家讲讲灯光在软装设计运用中的意义: 1.光表现情感.性格 可以运用"光"表现情感,性格的特点.表现室内的气氛.如光照度强表现了明快热烈,激情.公平等性格.而光照度弱时,则表现出沉闷阴暗,

【有感而发】

灵感:在七龙珠中,布玛使用胶囊释放出房子. 问题:能否在运用当今的技术,实现类似的功能呢!就是把大型物体缩小化,再需要的时,把它变大. 想的东西:记忆材料 .3D打印机 ------------------------------------------------------------------ 记忆材料还包括记忆合金,这种材质又称用记忆棉,记忆棉是上世纪六十年代由美国太空总署(NASA)研发,是一种开放式的细胞结构·具有温感减压的特性·也可以称作为是一种温感减压材料.这种材质应用在航天飞

偶氮二异庚腈

结构式 物理化学性质 我要供货我要求购 常用名 偶氮二异庚腈 英文名 2,2'-(Diazene-1,2-diyl)bis(2,4-dimethylpentanenitrile) CAS号 4419-11-8 分子量 248.36700 密度 0.93 g/cm3 沸点 330.6ºC at 760 mmHg 分子式 C14H24N4 熔点 45-70°C  产品用途 用作聚氯乙烯.聚丙烯腈.聚乙烯醇等的引发剂,也可用作橡胶.塑料的发泡剂 用作聚氯乙烯.聚乙烯醇.有机玻璃等高分子聚合物的聚合引发

【转载】CPU阿甘

原文:CPU阿甘  前言 上帝为你关闭了一扇门,就一定会为你打开一扇窗这句话来形容我最合适不过了.我是CPU, 他们都叫我阿甘, 因为我和<阿甘正传>里的阿甘一样,  有点傻里傻气的.上帝把我制造出来, 给我了一个很小的脑容量, 为数不多的寄存器能临时的记一点东西, 但是上帝给我打开了一扇特别的窗户, 那就是像阿甘一样,跑的飞快.到底有多快呢?  我这么比喻一下吧,  我的工作都是以纳秒为单位的, 你们人间的一秒, 我可能已经做了1000,000,000 (10亿)次动作了.相比而言, 内存比

IP等级

IP是Ingress Protection的缩写,IP等级是针对电气设备外壳对异物侵入的防护等级,来源是国际电工委员会的标准IEC 60529,这个标准在2004年也被采用为美国国家标准.  在这个标准中,针对电气设备外壳对异物的防护,IP等级的格式为IPXX,其中XX为两个阿拉伯数字,第一标记数字表示接触保护和外来物保护等级,第二标记数字表示防水保护等级,具体的防护等级可以参考下面的表格. IP是国际用来认定防护等级的代号 Ip等级由两个数字所组成,第一个数字表示防尘:第二个数字由表示防水,数