博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1228 Grandpa's Estate | 凸包
阅读量:5333 次
发布时间:2019-06-15

本文共 1805 字,大约阅读时间需要 6 分钟。

题目:

给你n个点,保证这些点都在凸包上(顶点或者边上),问这个凸包是不是一个稳定的凸包,

稳定被定义为:

存在一个点使得原来的点都在包含该点和原来的点的凸包上


题解:

题目中的要求等价于问每条边上的点超没超过三个

如果存在不够三个的就不是稳定的

Graham算法保证只求凸包的顶点,所以我们可以枚举凸包的每条边和每个点判断这个边上的点超没超过3个

n2的辣鸡算法

#include
#include
#include
#define N 1010using namespace std;int T,n,m;struct point{ int x,y; point (){}; point (int _x,int _y) { x=_x; y=_y; } point operator - (const point &a)const { return point(x-a.x,y-a.y); } int operator * (const point &a)const { return x*a.y-y*a.x; } int norm() { return x*x+y*y; }}p[N],q[N];int dot(const point &a,const point &b){ return a.x*b.x+a.y*b.y;}int Area(const point &x,const point &y,const point &z){ return (y-x)*(z-x);}struct line{ point a,b; int cnt; int Inline(const point &k) { int det=(a-k)*(b-k); if (det!=0) return 0; if (dot(a-k,b-k)>0) return 0; return 1; }}li[N];bool cmp(int u,int v){ int det=(p[u]-p[1])*(p[v]-p[1]); if (det!=0) return det>0; return (p[u]-p[1]).norm()<(p[v]-p[1]).norm();}void Graham(){ int id=1; for (int i=2;i<=n;i++) if (p[i].x
=2 && (p[j]-q[m-1])*(q[m]-q[m-1])>=0) m--; q[++m]=p[j]; }}bool solve(){ bool ret=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { li[j].cnt+=li[j].Inline(p[i]); } for (int i=1;i<=m;i++) if (li[i].cnt<=2) ret=1; return ret;}int main(){ scanf("%d",&T); while (T--) { scanf("%d",&n); m=0; for (int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y); Graham();// for (int i=1;i<=m;i++)// printf("On %d %d\n",q[i].x,q[i].y); q[m+1]=q[1]; for (int i=1;i<=m;i++) li[i].a=q[i],li[i].b=q[i+1],li[i].cnt=0; if (solve() || m<=2) puts("NO"); else puts("YES"); } return 0;}

 

转载于:https://www.cnblogs.com/mrsheep/p/8033160.html

你可能感兴趣的文章
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
1201 网页基础--JavaScript(DOM)
查看>>