裸的凸包,,我就来粘一下板子
把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 }