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 社交网络 最短路 货币兑换 斜率优化动态规划 项链工厂 线段树 生成树计数 ...
随机推荐
- psutil的使用
psutil是Python中广泛使用的开源项目,其提供了非常多的便利函数来获取操作系统的信息. 此外,还提供了许多命令行工具提供的功能,如ps,top,kill.free,iostat,iotop,p ...
- CentOS7--使用yum安装和管理软件
yum是红帽软件包管理器,它能能够查询,安装和卸载软件包,以及将整个系统更新到最新的可用版本.Yum可以在安装的过程中自动解决依赖关系. 1. 检查和更新软件包 1.1 查询更新 查看系统上哪些已安装 ...
- mybatis 之 parameterType="List" 2
<select id="queryGoodsByGoodsNoPcweb" parameterType="List" resultMap="si ...
- React Native(十一)——删除事件以及刷新列表
需求:删除列表中的某一项,但不刷新整个页面,底下的数据顺势而上(第一张是原始数据,第二张是删除掉"你会介今年"这条动态后显示的数据). 中间的过程比较曲折,只因为刚开始的时候自己只 ...
- 正则表达式(overall)
令自己想爱但深爱不上的正则表达式~ 阅读网站:http://c.biancheng.net/cpp/html/1402.html 为什么使用正则表达式? ①防止SQL注入:尤其对于网站,安全是至关重要 ...
- IOS 视频直播/智能家居(一行行敲代码,从零开始)lesson:1整体架构
本文转载至 http://blog.csdn.net/u014011807/article/details/47144027 前段时间由于工作需要做了一个视频直播/智能家居类的应用.算是对iOS音视频 ...
- No.2 PyQt学习
新增加了状态栏.菜单栏和工具栏,界面如下: 代码如下: # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class ...
- R语言(入门小练习篇)
问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...
- yum配置与使用(很详细)
yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件.一.yum的配置文件 $ cat /etc/yum ...
- Cracking the Coding Interview(linked list)
第二章的内容主要是关于链表的一些问题. 基础代码: class LinkNode { public: int linknum; LinkNode *next; int isvisit; protect ...