LOJ 10002 喷水装置 未完
LOJ 10002 奉旨写题解
来一份蒟蒻题解,真香。
我来带大家梳理一下思路:
1. 输入
(1)首先我们要注意一种情况:

如图,那个小圆,在图中我们发现,这个小圆小到一定程度时,是不接触此矩形的。
即
R圆 < d (R为半径,d为圆心距)
我们在处理输入时就可以直接抹去。
· (2)其次,我们可以发现,当 d>R圆 时,就有圆与线段的两个交点。计算这两个交点,根据勾股定理,有
L=sqrt(R*R±d*d)

2. 排序。(贪心策略)
根据这道题的目标,我们可以得到贪心策略。
bool cmp(seg a, seg b) { return a.l < b.l || a.l==b.l && a.r>b.r; }
这样,那些开始前,覆盖面积大的优质的喷水器就被找出来了再**比例失衡的时代,要找优质的
3. 处理。
如代码,定义i为扫描指针,从头扫到尾,再挂一个t,记录上一次的结尾,并不断更新。s是记录t的初始值的,用来比较第i个节点的开头于上一次结尾的大小,如HZR所言。当t,s不再更新,也就是已经扫到了结尾或已经全部覆盖时,就标记opt,最后用opt判有无解,完美结束。
#include <bits/stdc++.h> using namespace std;
const int maxn = 2e4 + ;
struct seg {
double l, r;
} a[maxn];
bool cmp(seg a, seg b) { return a.l < b.l||a.l==b.l&&a.r>b.r; }
int main() {
int n, l, w, T;
scanf("%d", &T);
while (T--) {
int x, r, cnt = ;
scanf("%d%d%d", &n, &l, &w);
while (n--) {
scanf("%d%d", &x, &r);
if (r >= w) {
a[cnt].l = x * 1.0 - sqrt(r * r - w * w / 4.0);
a[cnt++].r = x * 1.0 + sqrt(r * r - w * w / 4.0);
// 勾股过程。
}
}
sort(a, a + cnt, cmp);//贪心
int opt = , ans = , i = ;
double t = ;
while (t < l) {
ans++;//增加喷水器
double s = t;
while (a[i].l <= s && i < cnt) {
//a[i]的前<上个喷水器的后 且 i还在范围内
if (t < a[i].r)
t = a[i].r;
i++;
}
if (s == t && s < l) {
opt = ;
break;
}//如果s==t 且 s小于l(就是不行的情况,因为s铁定不能再超过l),就凉凉,opt=1
}
if (opt)
printf("-1\n");
else
printf("%d\n", ans);
}
return ;
}
LOJ 10002 喷水装置 未完的更多相关文章
- LOJ #10002. 喷水装置
题目 裸的贪心. 基本思想见图: Code: #include<iostream> #include<cstdio> #include<cstring> #incl ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 关于DOM的一些总结(未完待续......)
DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...
- MVC丶 (未完待续······)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
- 一篇文章让Oracle程序猿学会MySql【未完待续】
一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...
- [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
[教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...
随机推荐
- AutoField的话就报错:'AutoField' object has no attribute 'rel'
def data_inspect(self, data, extra=None): if isinstance(data, (QuerySet, Page, list)): convert_data ...
- 【js】【图片瀑布流】js瀑布流显示图片20180315
js实现把图片用瀑布流显示,只需要“jquery-1.11.2.min.js”. js: //瀑布流显示图片 var WaterfallImg = { option: { maxWidth: 850, ...
- 【分享】谈CSS3中display属性的flex布局
最近在学习微信小程序(重新学习微信小程序),在设计首页布局的时候,新认识了一种布局方式display:flex .guide-top{ height: 36%; display: flex; /*fl ...
- javascript高级
数组及操作方法 数组就是一组数据的集合,javascript中,数组里面的数据可以是不同类型的. 定义数组的方法 //对象的实例创建 var aList = new Array(1,2,3); //直 ...
- 深入理解Redis系列之SpringBoot集成Redis
SpringBoot环境 快速搭建一个SpringBoot工程 进入 https://start.spring.io 网站, 使用该网站初始化一个SpringBoot工程 添加相关依赖 因为使用spr ...
- 强大的金融类图表库 TradingView 使用分享
这段时间刚好做币圈交易所,运用到了现在最火的金融类图表库 -- TradingView ,就是强大,基本上现在的火币网(https://www.huobi.com),币安网(https://www.b ...
- Promise 错误处理
Promise 是一个异步返回单个结果的函数或方法 不使用 `catch()` 时,在 `success handler` 里的错误无法被捕捉到 使用 `catch()` 时,在 `succe ...
- Spring-----AOP-----事务
xml文件中: 手动处理事务: 设置数据源 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooled ...
- jdk和cglib动态代理
一.原理区别:java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件加 ...
- c++常量指针和指针常量的区别
int a:int * const p = &a: //指针常量,*p可以修改*p = 8:(OK) p不可以修改 p++(ERROR) int a,b:const int *p = & ...