zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    vue 中input的输入限制
    PC端百度地理围栏、绘制工具以及判断当前坐标是否再围栏中
    js判断鼠标点击的是哪个键
    vue过滤器的使用
    3.Mybatis的配置解析
    2.MyBatis的CRUD操作
    4.JVM类加载器深入解析及重要特性剖析
    3.JVM的接口初始化规则与类加载器准备阶段和初始化阶段的重要意义分析
    2.JVM的类加载器
    1.JVM如何学习
  • 原文地址:https://www.cnblogs.com/MXang/p/10428286.html
Copyright © 2011-2022 走看看