博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1228:Grandpa's Estate——题解
阅读量:6038 次
发布时间:2019-06-20

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

题目大意:给一个凸包,问是否为稳定凸包。

————————————————————————

稳定凸包的概念为:我任意添加一个点都不能使这个凸包得到扩充,这样的凸包为稳定凸包。

我们求完凸包后枚举边然后枚举有多少点在上面即可。

(网上的程序真的大部分是错的……)

#include
#include
#include
#include
#include
#include
#include
using namespace std;const int N=1001;struct point{ int x; int y;}p[N],q[N];int n,per[N],l;inline point getmag(point a,point b){ point s; s.x=b.x-a.x;s.y=b.y-a.y; return s;}inline int multiX(point a,point b){ return a.x*b.y-b.x*a.y;}inline int dis(point a,point b){ return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}inline bool cmp(int u,int v){ int det=multiX(getmag(p[1],p[u]),getmag(p[1],p[v])); if(det!=0)return det>0; return dis(p[1],p[u])
=2&&multiX(getmag(q[l-1],p[j]),getmag(q[l-1],q[l]))>=0){ l--; } q[++l]=p[j]; } return;}bool judge(){ for(int i=1;i<=l;i++){ int sum=0; for(int j=1;j<=n;j++){ if(multiX(getmag(q[i],p[j]),getmag(p[j],q[i%l+1]))==0)sum++; } if(sum<3)return 0; } bool flag=0; for(int i=2;i<=l&&!flag;i++){ if(multiX(getmag(q[i-1],q[i]),getmag(q[i],q[i%l+1]))!=0)flag=1; } return flag;}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y); graham(); if(judge())puts("YES"); else puts("NO"); } return 0;}

 

转载于:https://www.cnblogs.com/luyouqi233/p/8097506.html

你可能感兴趣的文章
Android计时器正确应用方式解析
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
ASP.NET 中设置路径的三种方式
查看>>
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>