热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BZOJ1007.[HNOI2008]水平可见直线

可见的直线为一下凸壳。先按斜率和截距从小到大排序,再用单调栈判断交点的相对位置即可。#includeconstintN5e4+7;constdouble

可见的直线为一下凸壳。

先按斜率和截距从小到大排序,再用单调栈判断交点的相对位置即可。


#include
const int N = 5e4 + 7;
const double eps = 1e-7;
inline int dcmp(double x) {
if (fabs(x) return x <0 ? -1 : 1;
}
struct P {
double x, y;
int id;
inline bool operator <(const P &rhs) const {
if (dcmp(x - rhs.x) == 0) return y return x }
} p[N];
int st[N], top;
inline double crossx(const P &a, const P &b) {
return (a.y - b.y) / (b.x - a.x);
}
void ins(int id) {
const P &cur = p[id];
while (top) {
if (dcmp(p[st[top]].x - cur.x) == 0) top--;
else if (top > 1 && dcmp(crossx(p[st[top]], cur) - crossx(p[st[top]], p[st[top - 1]])) <= 0) top--;
else break;
}
st[++top] = id;
}
int ans[N];
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lf%lf", &p[i].x, &p[i].y);
p[i].id = i;
}
std::sort(p + 1, p + 1 + n);
for (int i = 1; i <= n; i++)
ins(i);
for (int i = 1; i <= top; i++)
ans[p[st[i]].id] = 1;
for (int i = 1; i <= n; i++)
if (ans[i])
printf("%d ", i);
return 0;
}
View Code

推荐阅读
  • Bzoj1185最小矩阵覆盖[旋转卡壳+凸包+处理[0]情况]
    题目链接题目大意:就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉就是给你若干个点用一个最小的矩形把这些点覆盖掉解题思路& ... [详细]
  • *题意:往区间[1,10000000]的墙上贴海报,海报数量 ... [详细]
  • P3521[POI2011]ROTTreeRotations题目大意:给一棵$(1≤n≤200000)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少。我们 ... [详细]
  • poj 2421 Constructing Roads 解题报告
    题目链接:http:poj.orgproblem?id2421实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是, ... [详细]
  • 标准库Vector类型使用需要的头文件:#includeVector:Vector是一个类模板。不是一种数据类型。Vector ... [详细]
  • Linux多线程(2)
    线程的知识点太多,太重要,所以分成三部分进行总结学习线程安全多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。 ... [详细]
  • 0-0#includeintmain(intargc,charconst*argv[]){std::cout ... [详细]
  • 数据结构-二叉查找树(BST)
    二叉查找树是一种比较特殊的二叉树,表现为任意节点的值都比左孩子的值要大,而且小于等于右孩子的值,采用中序遍历BST(BinarySearchTree ... [详细]
  • 【定义】将构造过程与表示分开,以便于相同的构造过程创建不同的表示。如果对象的构造过程相对复杂,这样的构造模式会非常有效。【实例】我们需要根据需求组装相应的计算机,例如硬盘500G, ... [详细]
  • 数据结构学习记录(六)树
    前言树:有且只有一个称为根的节点,有若干个互不相交的子树,这些子树本身也是一颗树。通俗理解:树由节点与边组成, ... [详细]
  • 参考博文:https:www.cnblogs.comjoeblackzqqarchive201207102584121.html1、获取从1970年到现在的秒数(时间戳)time_ ... [详细]
  • 本文主要是由Wiskey大神的博客的结合少许个人的总结,传送门概念:状态压缩是以二进制来保存每一个的状态,比如总共的物品有n件,那么我一共的状态有2^n次,最大的状态用二进制表示为11. ... [详细]
  • bzoj4551[TJOI2016&HEOI2016]树给定一棵有根树,请支持一下两种操作:标记一个点询问一个点最近一个打了标记的祖先\(n,\m\le ... [详细]
  • typedef是一种有趣的声明形式:它为一种类型引入新的名字,而不是为变量分配空间。在某些方面,typedef类似于宏文本替换——它并没有 ... [详细]
  • 以下是实验程序的源代码:***********************pthread.c***************************#include#inc ... [详细]
author-avatar
川人是天下的盐恋歌_334
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有