本题就是求半交平面的交包含哪些直线,而且有点特殊(一般的半交平面用双端队列,因为可能转到最开始的直线,但本题不会,所以只需要一端操作就行了)。

 /**************************************************************
Problem: 1007
User: idy002
Language: C++
Result: Accepted
Time:184 ms
Memory:2960 kb
****************************************************************/ #include <cstdio>
#include <algorithm>
#define eps 1e-10
#define maxn 50010
using namespace std; int sg( double x ) {
return (x>-eps)-(x<eps);
}
struct Vector {
double x, y;
Vector(){}
Vector( double x, double y ) : x(x), y(y){}
};
typedef Vector Point;
struct Line {
int k, b;
int id;
Line(){}
Line( int k, int b, int id ) : k(k), b(b), id(id) {}
bool operator<( const Line & c ) const {
return k<c.k || ( k==c.k && b>c.b );
}
bool operator==( const Line & c ) const {
return k==c.k;
}
bool contain( const Point & p ) const {
return sg(k*p.x+b-p.y)<;
}
Point operator&( const Line & l ) const {
double x = 1.0 * (l.b-b) / (k-l.k);
return Point(x,x*l.k+l.b);
}
}; int n;
Line ln[maxn];
int ans[maxn]; void calc() {
static Line dql[maxn];
static Point dqp[maxn];
int beg, end; sort( ln, ln+n );
n = unique( ln, ln+n ) - ln;
dql[ beg = end = ] = ln[];
for( int i=; i<n; i++ ) {
while( end-beg> && !ln[i].contain(dqp[end-]) ) end--;
end++;
dql[end] = ln[i];
dqp[end-] = dql[end-]&dql[end];
}
int cnt = ;
for( int i=beg; i<=end; i++ )
ans[cnt++] = dql[i].id;
sort( ans, ans+cnt );
for( int i=; i<cnt; i++ )
printf( "%d ", ans[i] );
} int main() {
scanf( "%d", &n );
for( int i=; i<n; i++ ) {
scanf( "%d%d", &ln[i].k, &ln[i].b );
ln[i].id = i+;
}
calc();
}

bzoj 1007 半交平面简化版的更多相关文章

  1. poj3335 半交平面,多边形内核

    Rotating Scoreboard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5300   Accepted: 21 ...

  2. BZOJ 1007 水平可见直线 | 计算几何

    BZOJ 1007 水平可见直线 题面 平面直角坐标系上有一些直线,请求出在纵坐标无限大处能看到哪些直线. 题解 将所有直线按照斜率排序(平行的直线只保留最高的直线),维护一个栈,当当前直线与栈顶直线 ...

  3. bzoj 1007: [HNOI2008]水平可见直线 半平面交

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=1007; 题解 其实就是求每条直线的上半部分的交 所以做裸半平面交即可 #include ...

  4. bzoj 1007: [HNOI2008]水平可见直线【半平面交】

    其实并不算标准半平面交?但是思路差不多 先按照斜率排序,然后用栈维护凸壳,每遇到重斜率或a[i],s[top-1]交点的x轴在s[top],s[top-1]交点左侧,则说明s[top]被a[i],s[ ...

  5. BZOJ 1007: [HNOI2008]水平可见直线 平面直线

    1007: [HNOI2008]水平可见直线 Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则 ...

  6. BZOJ 1007 [HNOI2008]水平可见直线 ——半平面交 凸包

    发现需要求一个下凸的半平面上有几个交点. 然后我们把它变成凸包的问题. 好写.好调.还没有精度误差. #include <map> #include <ctime> #incl ...

  7. 2018.07.03 BZOJ 1007: [HNOI2008]水平可见直线(简单计算几何)

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MB Description 在xoy直角坐标平面上有n条直线L1,L2,-Ln, ...

  8. BZOJ 1007 水平可见直线

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.    例如,对于直线:    ...

  9. BZOJ 2458 最小三角形 | 平面分治

    BZOJ 2458 最小三角形 题面 一个平面上有很多点,求他们中的点组成的周长最小的三角形的周长. 题解 跟平面最近点对差不多,也是先把区间内的点按x坐标从中间分开,递归处理,然后再处理横跨中线的三 ...

随机推荐

  1. Double类型的数向上取整和向下取整

  2. vim 颜色主题设置

    先看看vim编辑器提供的色彩配置方案: 首先进入vim的color目录(/usr/share/vim/vim74/colors,不同的系统目录不同,建议在-/建立.vim目录,然后在些目录里建立对应的 ...

  3. scandir函数的研究【笔记】

    以下是本人的学习笔记,代码并非原创,均摘自官方源码,贴出来仅供学习记录用 scandir 的使用要注意内存泄漏的问题 scandir函数实现: vi ./uClibc-0.9.33.2/libc/mi ...

  4. linux kernel make构建分析

    前言 之前对uboot的构建进行了分析,现在再对linux kernel的构建进行分析.几年前的确也分析过,但是只是停留在笔记层面,没有转为文章,这次下定决定来完善它. 环境 同样,采用的还是zynq ...

  5. 64_s1

    SAASound-3.2-17.fc26.i686.rpm 13-Feb-2017 22:13 27650 SAASound-3.2-17.fc26.x86_64.rpm 13-Feb-2017 23 ...

  6. 013 GC机制

    本文转自:https://www.cnblogs.com/shudonghe/p/3457990.html 最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面 ...

  7. Loadrunner下WebTours系统自带的用户名和密码

    打开:http://127.0.0.1:1080/WebTours/ 系统默认自带两个用户名和密码,位于~\WebTours\MercuryWebTours\users: 1.用户名:joe,密码:y ...

  8. navigator.geolocation详解

    https://blog.csdn.net/qq_27626333/article/details/51815467 PositionOptions: JSON对象,监听设备位置信息参数 naviga ...

  9. Myeclipse编辑jsp文件很卡是什么原因?

    可能是配置问题,配置的时候不要把myeclipse连接到网络.否则每次编辑的时候要在网上查找,所以照成很卡.window->perferences->java->Installed ...

  10. js完成密码输入为空,和两次输入不一致

    <!DOCTYPE html><html><body> <script language="javascript"> functio ...