Graham算法求凸包问题

#include <iostream>
#include<algorithm>
using namespace std;
const int maxn = 1001;
struct node {node () {};node (int _x, int _y): x(_x), y(_y) {};int x, y;node operator -(node nd) {return node(x - nd.x, y - nd.y);}int operator *(node nd) {return x * nd.y - y * nd.x;}} p[maxn], q[maxn];
int per[maxn], n, l;inline int dis(node p1, node p2) {return (p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y);
}inline bool cmp(int v1, int v2) {int det = (p[v1] - p[1]) * (p[v2] - p[1]);if (det != 0)return det > 0;return dis(p[1], p[v1]) < dis(p[1], p[v2]);
}void Graham() {int i, id, k;id = 1;for (i = 2; i <= n; i++) {if (p[i].x < p[id].x || (p[i].x == p[id].x && p[i].y < p[id].y))id = i;}if (id != 1)swap(p[1], p[id]);for (i = 1; i <= n; i++) {per[i] = i;}sort(per + 2, per + n + 1, cmp);l = 0;q[++l] = p[1];for (i = 2; i <= n; i++) {k = per[i];while (l >= 2 && (q[l] - q[l - 1]) * (p[k] - q[l - 1]) <= 0)l--;q[++l] = p[k];}
}bool judge() {if (l == 2)return 0;int sum;for (int i = 1; i <= l; i++) {sum = 0;for (int j = 1; j <= n; j++) {if ((p[j] - q[i]) * (q[i % l + 1] - p[j]) == 0)sum++;}if (sum < 3)return 0;}return 1;
}int main() {int t, i;scanf("%d", &t);while (t--) {scanf("%d", &n);for (i = 1; i <= n; i++) {scanf("%d%d", &p[i].x, &p[i].y);}Graham();if (judge())puts("YES");else puts("NO");}
}

zoj 1377 Grandpa‘s Estate相关推荐

  1. poj 1228 Grandpa's Estate

    题目衔接:http://poj.org/problem?id=1228 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 168 ...

  2. Grandpa's Estate (凸包)

    传送门 Being the only living descendant of his grandfather, Kamran the Believer inherited all of the gr ...

  3. POJ 1228 Grandpa's Estate --深入理解凸包

    题意: 判断凸包是否稳定. 解法: 稳定凸包每条边上至少有三个点. 这题就在于求凸包的细节了,求凸包有两种算法: 1.基于水平序的Andrew算法 2.基于极角序的Graham算法 两种算法都有一个类 ...

  4. poj 1228 Grandpa's Estate 给定了一个凸包的部分顶点和边上的点,判断是否能唯一确定一个凸包...

    题目来源: http://poj.org/problem?id=1228 题意:题目输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否唯一.所谓唯一就是判断能 ...

  5. POJ1228 Grandpa's Estate

    题目: http://poj.org/problem?id=1228 题意: 给一堆点,是原凸包边上的点或内部的点(内部的点表明凸包被切割): 问能这些点能否唯一确定原来这个凸包 分析: 这是一个稳定 ...

  6. Grandpa's Estate POJ - 1228(凸包极角序改写)

    看了题目意思之后感觉哇,简单的 一批不就是判断线段之间有没有至少一个点嘛,,,,,结果wa到自闭,, 这个题的点有首先要根据点构造凸包,因为题目给的数据不一定是一个凸包,其次,我们在构造凸包极角排序的 ...

  7. ACM计算几何题目推荐

    //第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...

  8. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

  9. 计算几何相关资料+题目推荐(不定期补充)

    旋转卡壳:http://blog.csdn.net/accry/article/details/6070626 计算几何题目推荐:http://blog.csdn.net/accry/article/ ...

最新文章

  1. springboot配置ssl-pfx
  2. 云计算将为移动医疗带来哪些新机遇?
  3. 在村镇银行存款,银行先把利息全给了,这种存款安全吗?
  4. selector多路复用_多路复用器Selector
  5. 图书管理系统html_结自主可控数字化硕果,同方鼎欣推进基于OFD技术的数字档案管理系统研发...
  6. leetcode —— 面试题68 - I. 二叉搜索树的最近公共祖先
  7. mongodb mysql json数据类型_mongodb 数据格式补充
  8. java的随机数生成原理
  9. python mysqldb insert_python MySQLdb使用教程详解
  10. 【Caffe】利用log文件绘制loss和accuracy(转载)
  11. 华为机试HJ17:坐标移动
  12. 统计难题 HDU - 1251(字典树)
  13. WPF DataGrid使用 后台界面修改前台不刷新问题
  14. HashMap原理剖析
  15. JavaWeb学习笔记
  16. Boostnote:适合程序员的笔记软件
  17. 软件测试大牛成长计划
  18. Java并发包:ScheduledExecutorService
  19. 我的世界服务器怎么修改唱片,我的世界怎么修改唱片唱片音乐修改教程
  20. 人机协同变电站智能化发展,嵌入式为电网安全护航

热门文章

  1. python mongodb驱动 pymongo模块常见用法总结
  2. vCalendar文件格式解析
  3. 计算机与英语教学相结合,计算机与英语教学结合_英语论文.doc
  4. python字典、列表、元祖使用场景_(三)PYTHON字典 元祖 列表尝试应用
  5. python识字_“我女儿刚学会走路,我要在她识字后教她学Python吗?
  6. 计算机预测自己未来的相貌,新软件30秒预测未来样貌 完全可以以假乱真
  7. 普元元数据产品如何安装到普元应用服务器AppServer上
  8. android 如何制作可编辑的表格,在手机wps中编辑表格的方法
  9. 报错:Property or method “item“ is not defined on the instance but referenced during render.
  10. 计算机一会儿黑屏,电脑一会黑屏一会亮怎么处理?