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 社交网络 最短路 货币兑换 斜率优化动态规划 项链工厂 线段树 生成树计数 ...
随机推荐
- TCPdump指定时间或者指定大小进行循环抓取报文
背景:我们用tcpdump工具循环抓取网卡上的报文,我们会遇到如下情况: 1. 抓取报文后隔指定的时间保存一次: 2. 抓取报文后达到指定的大小保存一次: 本文就这两种情况给出tcpdump的使用方法 ...
- code_blocks 使用操作手册
38 39 编译以上程序,产生如下提示信息. 如此简 ...
- java框架---->quartz的使用(一)
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.今天我们就来学习一下它的使用,这里会分篇章对它进行介绍.只是希望能有个人,在我说没事的时候,知道我不 ...
- springbatch---->springbatch的使用(四)
这里我们重点学习一下springbatch里面的各种监听器的使用,以及job参数的传递.追求得到之日即其终止之时,寻觅的过程亦即失去的过程. springbatch的监听器 一.JOB LISTENE ...
- 【转】strlen源码
strlen源码剖析 学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码, ...
- Excel转Json
参考: Excel2JSON Excel转JSON Excel另存为JSON的技巧 (office的插件) excel2json 游戏程序员的自我修养 (其他人写的工具) Excel转JSON格式- ...
- AD添加LOGO的方法
1 将logo图片转换成单色的BMP 图像.简单的方法是使用Windows自带的画图程序,在将图片另存为时, 在文件类型下拉列表中选择单色.bmp即可.我们以Altium为例,如图所示将蓝色logo另 ...
- 【POJ2409】Let it Bead Pólya定理
[POJ2409]Let it Bead 题意:用$m$种颜色去染$n$个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $n,m$很小就是了. 题解:在旋转$i ...
- 关于Jmeter3.0,你必须要知道的5点变化
2016.5.18日,Apache 发布了jmeter 3.0版本,本人第一时间上去查看并下载使用了,然后群里或同事都会问有什么样变化呢?正好在网上看到一遍关于3.0的文章,但是是英文的.这里翻译一下 ...
- Xcode快速排错
EXTENDS:http://blog.csdn.net/guo_hongjun1611/article/details/8063009 1,模拟器运行完全没问题,真机运行失败. 有时候我们在模拟器上 ...