zoukankan      html  css  js  c++  java
  • [BZOJ1007][HNOI2008]水平可见直线-[凸包]

    Description

    传送门

    Solution

    直接凸包,可见我们要求下凸包,又因为凸包的构成直线k是递减的,直接排个序按套路走。

    感觉数据好水。。一份AC代码我自己手动出的数据都有bug。。然后我就加了一些小处理把我自己挑的bug给改了。(em这波操作)

    Code

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n,top,ans[500010];
    struct node{int k,b,id;
    }y[500010],st[500010];
    bool cmp(node a,node b){return (a.k==b.k)?a.b<b.b:a.k<b.k;}
    bool X(node a,node b,node c)
    {return 1.0*(a.b-b.b)*(c.k-a.k)>=1.0*(a.b-c.b)*(b.k-a.k);}
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&y[i].k,&y[i].b);
            y[i].id=i;
        } 
        sort(y+1,y+n+1,cmp);
        st[top=1]=y[1];
        int now=1;
        for (;y[now+1].k==st[top].k;st[top]=y[now+1],now++);
        for (int i=now+1;i<=n;i++)
        {
            while (top>1&&X(st[top-1],st[top],y[i])) top--;
            st[++top]=y[i];
        }
        for (int i=1;i<=top;i++) ans[i]=st[i].id;
        sort(ans+1,ans+top+1);
        for (int i=1;i<=top;i++) printf("%d ",ans[i]);
    }
  • 相关阅读:
    Spark SQL+day04笔记
    Spark 环境搭建
    海量数据处理 算法总结2
    Scala面试题 看过1
    HTML-table、form表单标签的介绍
    Java-CSS美化网页元素
    Java-BOM与DOM对象
    java-CSS盒子模型、浮动、定位
    java-基础面试题(2)
    Java-io流
  • 原文地址:https://www.cnblogs.com/coco-night/p/9520325.html
Copyright © 2011-2022 走看看