• poj 3348


    裸的凸包,,我就来粘一下板子

    把jls和dls的代码混合了一下(雾),感觉我要是能把camp里的几何掌握的差不多就稳         了。(mxy到底打了什么?)

    感觉叉积实在是个好东西qwq

    今晚cf还要不要打呢,,,可是这几天都是十一点多就早睡了。。。到时候神智不清怎么办,,,可是好想上个紫什么的。。。

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <algorithm>
     4 #include <vector>
     5 using namespace std;
     6 typedef double db;
     7 const db eps=1e-6;
     8 const db pi=acos(-1);
     9 int sign(db k){
    10     if (k>eps) return 1; else if (k<-eps) return -1; return 0;
    11 }
    12 int cmp(db k1,db k2){return sign(k1-k2);}
    13 struct point{
    14     db x,y;
    15     point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
    16     point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
    17     point operator * (db k1) const{return (point){x*k1,y*k1};}
    18     point operator / (db k1) const{return (point){x/k1,y/k1};}
    19     bool operator == (const point &k1) const{return cmp(x,k1.x)==0&&cmp(y,k1.y)==0;}
    20     bool operator <(const point &k1)const {
    21         int c=cmp(x,k1.x);
    22         if(c)return c==-1;
    23         return cmp(y,k1.y)==-1;
    24     }
    25 };
    26 db cross(point k1,point k2){return k1.x*k2.y-k1.y*k2.x;}
    27 db dot(point k1,point k2){return k1.x*k2.x+k1.y*k2.y;}
    28 int n;
    29 vector<point> convexHull(vector<point> ps){
    30     int n = ps.size();if(n<=1)return ps;
    31     sort(ps.begin(),ps.end());
    32     vector<point> qs(n*2);int k=0;
    33     for(int i=0;i<n;qs[k++]=ps[i++])
    34         while (k>1&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k;
    35     for(int i=n-2,t=k;i>=0;qs[k++]=ps[i--])
    36         while (k>t&&cross(qs[k-1]-qs[k-2],ps[i]-qs[k-2])<=0)--k;
    37     qs.resize(k-1);
    38     return qs;
    39 }
    40 vector<point>p;
    41 db x,y;
    42 int main(){
    43     scanf("%d",&n);
    44     for(int i=1;i<=n;i++){
    45         scanf("%lf%lf",&x,&y);
    46         p.push_back(point{x,y});
    47     }
    48     p=convexHull(p);
    49     int m=p.size();
    50     int ans=0;
    51     for(int i=0;i<m;i++){
    52         ans+=cross(p[i],p[(i+1)%m]);
    53     }
    54     ans=abs(ans)/2;
    55     printf("%d
    ",ans/50);
    56 }
    View Code
  • 相关阅读:
    UICollectionViewController用法
    UISegmentedControl的详细使用
    &#x开头的是什么编码呢。浏览器可以解释它。如&#20013;&#22269;等同与中文"中国"?
    Random.nextint() 和Math.random()的区别
    UIGestureRecognizer ios手势识别温习
    [工具]Mac平台开发几个网络抓包工具(sniffer)
    IOS中Json解析的四种方法
    iOS官方Sample大全
    Ubuntu 16.04安装cuda7.5 GCC
    Ubuntu中升极下载4.2内核
  • 原文地址:https://www.cnblogs.com/MXang/p/10428286.html
Copyright © 2020-2023  润新知