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
原文地址:https://www.cnblogs.com/MXang/p/10428286.html