zoukankan      html  css  js  c++  java
  • 【BZOJ 1007】【HNOI 2008】水平可见直线 解析几何

    之前机房没网就做的这道题,用的解析几何判断交点横坐标

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 500003
    #define eps 1E-8
    using namespace std;
    struct node {
    	double k, b;
    	int id;
    } line[N];
    int n, stack[N], top = 0;
    bool ans[N];
    inline bool cmp(node X, node Y) {
    	if (fabs(X.k - Y.k) < eps)
    		return X.b < Y.b;
    	else
    		return X.k < Y.k;
    }
    inline double crossx(int X, int Y) {
    	return (line[Y].b - line[X].b) / (line[X].k - line[Y].k);
    }
    inline void insert(int x) {
    	while (top) {
    		if (fabs(line[x].k - line[stack[top]].k) < eps)
    			--top;
    		else
    			if (crossx(x, stack[top]) <= crossx(stack[top], stack[top - 1]) && top > 1)
    				--top;
    			else
    				break;
    	}
    	stack[++top] = x;
    }
    int main() {
    	scanf("%d
    ", &n);
    	for(int i = 1; i <= n; ++i) {
    		scanf("%lf%lf
    ", &line[i].k, &line[i].b);
    		line[i].id = i;
    	}
    	sort(line + 1, line + n + 1, cmp);
    	for(int i = 1; i <= n; ++i)
    		insert(i);
    	for(int i = 1; i <= top; ++i)
    		ans[line[stack[i]].id] = 1;
    	for(int i = 1; i <= n; ++i)
    		if (ans[i])
    			printf("%d ",i);
    	return 0;
    }
    

    hhh

  • 相关阅读:
    从开发者角色到产品角色转换
    前端开发做什么?
    最近的前端开发认知总结
    最近的Vue知识总结
    计算机网络
    javascript 字符串加密的几种方法
    JSON数据解析
    JAVA 自定义状态码
    JAVA jdbc获取数据库连接
    JAVA通过md5方法进行加密
  • 原文地址:https://www.cnblogs.com/abclzr/p/5344786.html
Copyright © 2011-2022 走看看