graham模板整理
来源:互联网 发布:大数据应用的典型案例 编辑:程序博客网 时间:2024/06/05 18:03
感觉以前写的graham代码风格太差了,然后又重新整理了一份
struct Node{ double x,y; int pos; double val;}a[maxn],s;double across(Node x,Node y,Node z)//z在x,y连线的顺时针为负{ return (x.x - y.x) * (z.y - y.y) - (x.y - y.y) * (z.x - y.x);}bool cmp(Node x,Node y){ if(x.val == y.val)return d2(x,s) < d2(y,s); return x.val > y.val;}void Init(){for(int i = 1;i <= n;i ++){ scanf("%lf%lf",&a[i].x,&a[i].y);a[i].pos = i; if(a[i].y < s.y || (a[i].y == s.y && a[i].x < s.x))s = a[i];}for(int i = 1;i <= n;i ++)if(a[i].x == s.x && a[i].y == s.y)a[i].val = 1;else a[i].val = get(a[i],s);sort(a + 1,a + n + 1,cmp);}void graham() { Node st[maxn]; int len = 0; st[++ len] = a[1]; if(n>= 2) st[++ len] = a[2]; if(n >= 3) st[++ len] = a[3]; for(int i = 4; i <= n; i ++) { while(across(st[len],st[len],a[i]) <= 0)//< 0是可以允许共线,<= 0是不允许 { len --; } st[++ len] = a[i]; } //周长 double ans = 0; for(int i = 1; i <= len - 1; i ++) { ans += distances(st[i],st[i + 1]); } ans += distances(st[1],st[len]) ;//面积:double anss = 0; for(int i = 1; i <= len - 1; i ++) { anss += (st[i].x * st[i + 1].y - st[i + 1].x * st[i].y) / 2; } }
阅读全文
0 0
- graham模板整理
- Graham-scan模板
- 凸包Graham模板
- 二维凸包模板 【Graham扫描算法】
- 【凸包模板】Graham算法、Andrew算法
- 二维凸包模板(Graham算法)
- 计算几何--求凸包模板--Graham算法--poj 1113
- hdu 1348 Wall(凸包模板题 Graham)
- 凸包模板(分治 or Graham扫描法)
- 模板整理
- 模板整理---大数模板
- JOJ 2731 凸包模板题 && 贴个自己写的Graham凸包模板
- Graham算法模板 F 题Saint John Festival 20152016-acmicpc-southwestern-europe-regional-
- poj 2007 Scrambled Polygon(凸包Graham扫描线模板)
- 【整理】Eclipse注释模板
- 排序模板(整理)
- 网站模板整理
- Templat 模板(整理)
- 存储账户之间转移虚拟机
- AJAX学习笔记(一)_简介
- Android逆向初级-smali日志注入
- 【干货分享】大数据开发套件DataIDE使用教程
- 锟斤拷?UTF-8与GBK互转,为什么会乱码?
- graham模板整理
- 高斯混合模型--GMM
- eclipse maven 导出项目依赖的jar包
- 图片验证码
- maven多环境发布.
- 合并图片添加水印并压缩文件提供下载
- Innodb Cluster 入门(3) Mysql主从复制
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
- 读《编译原理》第七章,运行时刻环境