zoukankan      html  css  js  c++  java
  • 【题解】二维凸包

    【题解】二维凸包

    呵呵呵复习一下这个东西免得做到计算几何连暴力都不会嘤嘤嘤

    免得到时候写斜率优化结果凸包不会了嘤嘤嘤

    数学走起:

    [vec{a}=(x_1,y_1),vec{b}=(x_2,y_2) \ shadow_{|vec{a} imesvec{b}|}=x_1y_2-x_2y_1 ]

    根据右手螺旋定则。(shadow)是我乱搞的符号,虽然我搞不懂为什么是这样,但是这个应该和(sin(0.5pi)=1,sin0=0)有关,就不纠结了,也比较好记。

    遵循(anson)的意见,重载(\%)

    复杂度在排序(O(nlog n))

    搞个(struct​)(struct​)玩玩。嘿嘿最近代码变sao了 有各种语法操作233(qaq)

    #include<bits/stdc++.h>
    using namespace std; 
    const int maxn=1e4+5;
    double stdx,stdy,ans;int n;
    
    struct P{
    #define pf(x) ((x)*(x))
          double x,y;
          struct vec{
    	    double x,y;
    	    vec(){x=y=0;}
    	    vec(const P&a,const P&b){x=b.x-a.x;y=b.y-a.y;}
    	    inline double operator %(const vec& a){return x*a.y-y*a.x;}
          };
          P(){x=y=0;}
          P(double a,double b){x=a;y=b;}
          inline void scan(){scanf("%lf%lf",&x,&y);}
          inline double operator -(P a){return sqrt(pf(x-a.x)+pf(y-a.y));}
          inline bool operator <(P a){
    	    double ret=vec(P(stdx,stdy),*this)%vec(P(stdx,stdy),a);
    	    if(ret>0) return 1;
    	    if(ret!=0) return 0;
    	    return *this-P(0,0)<a-P(0,0);
          }
    #undef pf
    }data[maxn];
    vector < P > s;
    
    int main(){
    #ifndef ONLINE_JUDGE
          freopen("in.in","r",stdin);
          freopen("out.out","w",stdout);
    #endif
          scanf("%d",&n);
          data[1].scan();stdx=data[1].x;stdy=data[1].y;
          for(register int t=2;t<=n;++t)
    	    if(data[t].scan(),data[t].y<stdy)
    		  stdy=data[t].y,stdx=data[t].x,swap(data[1],data[t]);
          sort(data+2,data+n+1);
          s.push_back(data[1]);
          for(register int t=2;t<=n;s.push_back(data[t]),++t)
    	    while(s.size()>1&&P::vec(*(s.end()-2),*(s.end()-1))%P::vec(*(s.end()-2),data[t])<0) s.pop_back();
          if(s.size()>2) s.push_back(*s.begin());
          for(register int t=1,edd=s.size();t< edd;++t)
    	    ans+=s[t]-s[t-1];
          return !printf("%.2lf
    ",ans);
    }
    
    
  • 相关阅读:
    shell test条件检查
    Mysql 创建只读账户
    cmd 批处理创建 IIS 站点
    Linux date获取时间戳
    数据结构与算法面试题80道(25)
    数据结构与算法面试题80道(24)
    数据结构与算法面试题80道(23)
    数据结构与算法面试题80道(22)
    数据结构与算法面试题80道(21)
    数据结构与算法面试题80道(20)
  • 原文地址:https://www.cnblogs.com/winlere/p/10611894.html
Copyright © 2011-2022 走看看