凸包模板
来源:互联网 发布:手机淘宝团购在哪 编辑:程序博客网 时间:2024/06/04 19:39
typedef double flt;const flt eps = 1e-12, INF = 1e18, PI = acos(-1.0);flt sqr(flt x) {return x * x;}int sgn(flt x) {return x<-eps?-1:(x>eps);}flt fix(flt x) {return sgn(x)==0?0:x;}struct Point { flt x, y; Point(flt a=0, flt b=0) : x(a), y(b) {} bool operator < (const Point &r) const { return sgn(x-r.x)<0||(sgn(x-r.x)==0&&sgn(y-r.y)<0); } bool operator == (const Point &r) const { return sgn(x-r.x)==0&&sgn(y-r.y)==0; } Point operator *(const flt &k) const {return Point(x*k,y*k);} Point operator /(const flt &k) const {return Point(x/k,y/k);} Point operator -(const Point &r) const {return Point(x-r.x,y-r.y);} Point operator +(const Point &r) const {return Point(x+r.x,y+r.y);} flt dot(const Point &r) {return x*r.x+y*r.y;} flt det(const Point &r) {return x*r.y-y*r.x;} flt sqr() {return x*x+y*y;} flt abs() {return hypot(x, y);} Point rot() {return Point(-y,x);} Point rot(flt A) {return Point(x*cos(A)-y*sin(A),x*sin(A)+y*cos(A));} Point trunc(flt a=1.0) {return (*this)*(a/this->abs());}};vector<Point> convex_hull(vector<Point> u) { sort(u.begin(), u.end()); u.erase(unique(u.begin(), u.end()), u.end()); if (u.size()<3u) return u; vector<Point> ret; for (size_t i=0,o=1,m=1;~i;i+=o) { while (ret.size()>m) { Point A=ret.back()-ret[ret.size()-2],B=ret.back()-u[i]; if (A.det(B)<0) break; ret.pop_back(); } ret.push_back(u[i]); if (i+1==u.size()) m=ret.size(),o=-1; } ret.pop_back(); return ret;}flt dis(Point A, Point B, Point O) { return fabs((O-A).det(B-A)/(A-B).abs());}
0 0
- 凸包模板
- 1392 凸包模板
- 凸包模板
- 凸包模板题
- 更新凸包模板
- 三维凸包模板
- 凸包模板
- 三维凸包模板
- 凸包模板
- 凸包模板
- 三维凸包模板
- 三维凸包模板
- 凸包模板
- 凸包 andrew模板
- 凸包面积模板
- 模板,凸包
- 凸包模板
- 凸包模板!
- Python 的 time模块
- 第十三周阅读程序2:虚析构函数
- java中long和Long的区别
- 我不能做到你想要的我,但我能做最好的自己
- DP两道hdoj关于序列的水题hdoj1087,1159
- 凸包模板
- CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(2)
- spingMVC之国际化
- 血色西晋读书杂记
- 安卓学习笔记
- HDFS原理解析(总体架构,读写操作流程及源码查看等)
- GDB调试器使用总结
- Linux网络编程:原始套接字编程及实例分析(一)
- PaintCode 教程:矢量图轻松转换成CoreGraphics代码