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 社交网络 最短路 货币兑换 斜率优化动态规划 项链工厂 线段树 生成树计数 ...
随机推荐
- apt-get/dpkg常用指令备查
apt-get install <package> Downloads <package> and all of its dependencies, and installs ...
- Unity Shader 修改自定义变量的值
Properties { _R(,)) = 1.0 _ColorTex("ColorTex (RGB)", 2D) = "red" {} } SubShader ...
- 《Lua程序设计》第3章 表达式 学习笔记
3.1 算术操作符“+”(加法).“-”(减法).“*”(乘法).“/”(除法).“^”(指数).“%”(取模).3.2 关系运算符< > <= >= == ~=3.3 逻辑操 ...
- VS中快捷键修改以及快捷键的查看
eclipse用习惯了一直想把VS中的alt+/改为自动补全,同时自定义一下C#环境下自动加入命名控件的快捷键,前段时间摸索了一下,找到了比较好的方法 首先是vs中修改快捷键的方法:工具->选项 ...
- Android学习之Dialog
在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框; 实例如下: 1.效果图: 2.XML代码: ...
- Matlab练习——素数查找
输入数字,0结束,判断输入的数字中的素数 clc; %清空命令行窗口的数据 clear; %清除工作空间的变量 k = ; n = ; %素数的个数 zzs(k) = input('请输入正整数: ' ...
- USACO The Clocks
操作间没有次序关系,同一个操作最多重复3次... 可以直接暴力... The Clocks IOI'94 - Day 2 Consider nine clocks arranged in a 3x3 ...
- 日记整理---->2017-05-14
学习一下知识吧,好久没有写博客了.如果他总为别人撑伞,你又何苦非为他等在雨中. 学习的知识内容 一.关于base64的图片问题 byte[] decode = Base64.base64ToByteA ...
- 为android编译libsocket的脚本
#!/bin/bash U32=0 #编译64位arm时 U32=0 编译32位arm时 U32=1 其他参数不需要变动 TARGET=android-24 HOST=darwin-x86_64 ...
- 题目1029:魔咒词典(map使用以及字符串读取函数总结)
题目链接:http://ac.jobdu.com/problem.php?pid=1029 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus // // ...