zoukankan      html  css  js  c++  java
  • 【BZOJ】1007: [HNOI2008]水平可见直线(凸包)

    题目

    传送门:QWQ

    分析

      在下面维护一个凸壳

      好久没写博客了......

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=500005;
    const double eps=1e-15,INF=1e10;
    struct Line{
        double a,b;int n;
    }l[maxn];
    Line st[maxn];int top=0;
    bool cmp(Line a,Line b){
        if(fabs(a.a-b.a)<eps)return a.b<b.b;
        return a.a<b.a;
    }
    bool cmp2(Line a,Line b){ return a.n<b.n; }
    double cross(Line x,Line y){//交点的x值 
        return (y.b-x.b)/(x.a-y.a);
    }
    int main()
    {
        int n;
        scanf("%d",&n); 
        for(int i=1;i<=n;i++){
            scanf("%lf%lf",&l[i].a,&l[i].b);
            l[i].n=i;
        }
        sort(l+1,l+1+n,cmp);
        
        for(int i=1;i<=n;i++){
        //    printf("--- %d
    ",top);
            while((top>1 && cross(st[top-1],st[top])>=cross(st[top-1],l[i]) ) || (top>0 && fabs(st[top].a-l[i].a)<eps)){
                top--;
            }
            st[++top]=l[i];
        }
        
        sort(st+1,st+1+top,cmp2);
        for(int i=1;i<=top;i++) printf("%d ",st[i].n);
        return 0;
    }
  • 相关阅读:
    python列表[]中括号
    python元组()小括号
    python break continue跳过和跳出循环
    python FOR循环
    python while循环
    python if elif else判断语句
    python使用变量
    python -input用户输入
    pycharm模板
    港股收费
  • 原文地址:https://www.cnblogs.com/noblex/p/8974137.html
Copyright © 2011-2022 走看看