BZOJ4614 UVA1742 Oil 计算几何+搜索+扫描线
正解:差分
解题报告:
一个结论:最优解一定可以通过各种变换(旋转/平移)使得经过一条线段的左端点(很显然的亚子$QwQ$
(噢似乎是可以证明一定存在最优解经过左端点和右端点,,,?虽然但是并没啥用而且感觉虽然很对但是不懂正确性的亚子就不管了$/kel$
然后看到数据范围$\leq 300$,就直接枚举是经过哪个线段的左端点呗
然后怎么算这个线呢?最傻逼的方法当然就再枚下经过哪条线然后算下能经过哪些线算一下$balabala$的,不详细港了反正是$T$的
考虑算斜率
显然如果固定了一个端点之后每条线段就可以化成一个斜率的区间,然后这题就变成了给你一些区间每个区间有一个权值问哪个点的权值之和最大是趴
考虑差分,在左端点加上权值右端点减去权值,取个$max$就成.
对了,我开始一直没有理解...我说为什么要$+eps$???毫无意义的趴???然后就去问了托腮腮(原来托腮那时候就那么强了嘛$/kel$
然后学到了,就是说,因为可能出现玄学误差趴,比如可能三点共线的时候除法算出来是不相同的斜率了
为了防止这种玄学事件,我们一般就,$+eps$(高斯消元里面也有啊,为了防止玄学误差所以判断不是相等而是$\leq eps$嘛
好滴学到了,以后做这种可能存在精度误差的题目都要注意$eps$这个东西鸭,$over$
#include<bits/stdc++.h>
using namespace std;
#define rp(i,x,y) for(register int i=x;i<=y;++i) const int N=+;
int n,tot,ans;
double eps=1e-;
struct ed{int x1,x2,y,len;}a[N];
struct xl{double k;int len;}b[N<<]; inline int read()
{
char ch=getchar();int x=;bool y=;
while(ch!='-' && (ch<'' || ch>''))ch=getchar();
if(ch=='-')y=,ch=getchar();
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline bool cmp(xl x,xl y){return x.k<y.k;}
inline void dfs(int x,int y)
{
int cnt=;
rp(i,,n)
{
if(a[i].y!=y)
{
b[++cnt].k=(double)(a[i].x1-x)/(a[i].y-y);b[++cnt].k=(double)(a[i].x2-x)/(a[i].y-y);
if(b[cnt].k>b[cnt-].k){b[cnt-].len=a[i].len;b[cnt].len=-a[i].len;b[cnt].k+=eps;}
else{b[cnt].len=a[i].len;b[cnt-].len=-a[i].len;b[cnt-].k+=eps;}
}
}
sort(b+,b+cnt+,cmp);
rp(i,,cnt)tot+=b[i].len,ans=max(ans,tot);
} int main()
{
while(~scanf("%d",&n))
{
ans=;
rp(i,,n){a[i].x1=read(),a[i].x2=read(),a[i].y=read();if(a[i].x1>a[i].x2)swap(a[i].x1,a[i].x2);a[i].len=a[i].x2-a[i].x1;}
rp(i,,n){tot=a[i].len;ans=max(tot,ans);dfs(a[i].x1,a[i].y);}
printf("%d\n",ans);
}
return ;
}
哇我真滴觉得!这个方法!太太太妙了!
BZOJ4614 UVA1742 Oil 计算几何+搜索+扫描线的更多相关文章
- BZOJ4614/UVA1742 Oil 计算几何
传送门 题意:在平面直角坐标系中给出$N$条互不相交的.与$x$轴平行.且在$x$轴上方的线段,每一条线段的价值为其长度.求一条不与$x$轴平行的直线,使得与这条直线相交的线段的价值之和最大,求出这个 ...
- UVALIVE 5893 计算几何+搜索
题意:很复杂的题意,我描述不清楚. 题目链接:http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=3033#problem/33526 大致是,给定一个起 ...
- BZOJ4614 [Wf2016]Oil
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- A - Oil Deposits(搜索)
搜索都不熟练,所以把以前写的一道搜索复习下,然后下一步整理搜索和图论和不互质的中国剩余定理的题 Description GeoSurvComp地质调查公司负责探测地下石油储藏. GeoSurvComp ...
- Oil Deposits 搜索 bfs 强联通
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)
题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- 【FINAL】NOI
我就是复习一下..根本就不是什么题解...谁也看不懂的... NOI2007 社交网络 最短路 货币兑换 斜率优化动态规划 项链工厂 线段树 生成树计数 ...
随机推荐
- 关于OSG+QT+VS版本的问题
CMake3.10.0 Qt5.11.0安装包只有VS2017_64版本,没有VS2017的32位版本,有VS2015的32位版本 Qt5.11.0+osg3.4在CMake的时候,会出现 CMake ...
- AddComponentRecursively
class AddComponentRecursively extends ScriptableWizard { var componentName : String = ""; ...
- BugHD 与你的应用一起成长
BugHD 新增功能 1.新增安装量.启动量的统计功能 BugHD SDK 1.3.0新增安装量.启动量的统计功能,在崩溃分析页面右上角可看到安装量和启动量. BugHD 体验优化 1.Android ...
- pojo与DTO的区别
ational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO. ...
- Elasticseach的评分机制
lucene 的评分机制 elasticsearch是基于lucene的,所以他的评分机制也是基于lucene的.评分就是我们搜索的短语和索引中每篇文档的相关度打分. 如果没有干预评分算法的时候,每次 ...
- 使用java发送QQ邮件
使用java发送邮件的时候,需要先下载两个jar包,连接如下: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 然后将这连个包导入,博主用的是 ...
- 编写java的时候出现“编码GBK的不可映射字符”
今天在编写文件的时候,使用 javac ***.java 但是java文件里面会出现一些中文的信息,So:会报错 方法: 加参数-encoding UTF-8 例如:javac -encodig UT ...
- window下遍历并修改文件
今天需要写一个遍历文件夹下的所有文件,试了试以前的方法竟然报错了.重新改了一下. #include <iostream> #include <stdlib.h> #includ ...
- Android Security Internals
- jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)
一.问题概述 连接远程java应用除了jstatd方式,还有jmx方式.不必拘泥于一种,一种不行可以果断尝试另一种,兴许就行了. 姊妹篇在这: jvisualvm连接远程应用终于成功,附踩大坑记录!! ...