题目:
http://poj.org/problem?id=1228

题意:
给一堆点,是原凸包边上的点或内部的点(内部的点表明凸包被切割);
问能这些点能否唯一确定原来这个凸包

分析:
这是一个稳定凸包问题;
如果凸包上一条边唯一确定,那么这条边上至少要有3个点
所以,先跑一遍凸包,然后检查是否每条边至少有3个点;
用向量平行检查 ( 向量叉乘=0则三点共线 )

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct Point{double x,y;Point(double x=0,double y=0) :x(x),y(y) {}Point operator + (Point p) {return Point(x+p.x,y+p.y);}Point operator - (Point p) {return Point(x-p.x,y-p.y);}Point operator * (double d){return Point(x*d,y*d);}
};
const double eps=1e-8;
int sgn(double x)
{if(x>eps) return 1;if(x<-eps) return -1;return 0;
}
double cross(Point p1,Point p2) {return p1.x*p2.y-p2.x*p1.y;}
const int Tmax=1005;
bool cmp(Point i,Point j)
{if(i.x<j.x) return true;if(i.x>j.x) return false;return i.y<j.y;
}
int convexHull(int n,Point *P,Point *aim)
{int i,m=0;sort(P+1,P+1+n,cmp);for(i=1;i<=n;i++){while(m>=2&&cross(aim[m]-aim[m-1],P[i]-aim[m-1])<0) m--;aim[++m]=P[i];}int k=m;for(i=n-1;i>=1;i--){while(m>k&&cross(aim[m]-aim[m-1],P[i]-aim[m-1])<0) m--;aim[++m]=P[i];}return m;
}
void check(int num,Point *aim)
{int i=2,online=2;//aim[++num]=aim[1];while(i<=num){while(i<num&&sgn(cross(aim[i]-aim[i-1],aim[i+1]-aim[i-1]))==0) i++,online++;if(online<=2){printf("NO\n");return;}i++;online=2;}bool ok=false;for(i=3;i<=num;i++)if(sgn(cross(aim[2]-aim[1],aim[i]-aim[1]))!=0){ok=true;break;}if(ok==false) printf("NO\n");else if(sgn(cross(aim[num]-aim[num-2],aim[num-1]-aim[num-2]))!=0) printf("NO\n");else printf("YES\n");return;
}
void run(int n,int num,Point *aim,Point *P)
{int i;for(i=1;i<=n;i++)printf("P:x=%.0lf y=%.0lf\n",P[i].x,P[i].y);for(i=1;i<=num;i++)printf("x=%.0lf y=%.0lf\n",aim[i].x,aim[i].y);return;
}
int main()
{int T,n,i,num;Point P[Tmax],aim[Tmax];scanf("%d",&T);while(T--){scanf("%d",&n);for(i=1;i<=n;i++)scanf("%lf%lf",&P[i].x,&P[i].y);num=convexHull(n,P,aim);//run(n,num,aim,P);check(num,aim);}return 0;
}

POJ1228 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. Grandpa's Estate POJ - 1228(凸包极角序改写)

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

  6. zoj 1377 Grandpa‘s Estate

    Graham算法求凸包问题 #include <iostream> #include<algorithm> using namespace std; const int max ...

  7. POJ1228(稳定凸包问题)

    题目:Grandpa's Estate   题意:输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否稳定.所谓稳 定就是判断能不能在原有凸包上加点,得到一个更 ...

  8. ACM计算几何题目推荐

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

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

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

最新文章

  1. android adb命令
  2. (七)中介者模式-C++实现
  3. 北斗词卡(二):这些关于北斗的缩略词术语,你认识吗?
  4. 电脑开机一会就蓝屏怎么回事_客户电脑老是出现问题,三天来找三次麻烦!拆机后“真凶”大白!...
  5. .NET Core SignalR Redis底板详解(二)
  6. oracle for循环_浅谈Oracle的执行计划
  7. 新型RNN:将层内神经元相互独立以提高长程记忆 | CVPR 2018论文解读
  8. 没有梦想,你跟咸鱼有什么分别?
  9. 马云卸任,张勇宣布未来五年目标:消费规模10万亿;华为发布基于5G和AI解决方案;新iPhone不支持5G 库克:市场不成熟……...
  10. jfinal连接oracle_JFinal框架操作oracle数据库
  11. 手把手教你写Java项目文档
  12. 视频下载v1.0全能短视频解析
  13. Ubuntu 16.04 单显卡安装Nvidia驱动+GTX750显卡安装CUDA 9.1+cuDNN 7.1.3
  14. Win 7 远程桌面报错“出现身份验证错误,要求的函数不受支持”解决办法
  15. 爱荷华州立大学计算机专业,爱荷华州立大学计算机博士专业课程设置情况
  16. 易语言API获取进程程序路径
  17. 华为视频会议终端TE40配置
  18. Python后台开发基础——Web前端基础
  19. Redis实现统计网站访问人数的功能
  20. 给孩子打印试卷用什么软件?

热门文章

  1. mRSA和SEM介绍
  2. arm el2与el3_armv8架构与指令集.整理.初稿.pdf
  3. Force removing ActivityRecord no saved state问题的原因分析
  4. 吴恩达深度神经网络笔记—人脸识别
  5. 10款最佳项目管理工具推荐,总有一款适合你
  6. 原生JavaScript实现 城市二级三级联动
  7. PHP:“草根语言”挑战“大腕”Java .Net
  8. 2021年山东大学python与大数据分析期末试题回忆
  9. boa 传递 数据到 html,使用html网页boa这个web服务器通过cgi控制2410板子上LED灯点亮...
  10. codeMirror 使用教程