博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1228
阅读量:4947 次
发布时间:2019-06-11

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

给题意跪了。。。

题目输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否稳定。所谓稳定就是判断能不能在原有凸包上加点,

得到一个更大的凸包,并且这个凸包包含原有凸包上的所有点。

 

这样,只需判断每条边是否有大于等于三点即可。注意,一条直线的凸包是NO

#include 
#include
#include
#include
using namespace std;struct point { int x,y;}p[1050];int n;int stop,cnt;int ans[1050],st[1050];bool cmp(point A,point B){ if(A.y
0;}void slove(){ stop=cnt=0; st[stop++]=0; st[stop++]=1; for(int i=2;i
1&&multi(p[i],p[st[stop-1]],p[st[stop-2]])) stop--; st[stop++]=i; } for(int i=0;i
=0;i--){ while(stop>1&&multi(p[i],p[st[stop-1]],p[st[stop-2]])) stop--; st[stop++]=i; } for(int i=1;i
=cnt) { printf("NO\n"); continue; } for(int i=0;;i=k-1){ s=p[ans[i]];t=p[ans[++i]]; if(i+1>=cnt){ flag=false; break; } e=p[ans[i+1]]; if((e.x-s.x)*(t.y-s.y)-(e.y-s.y)*(t.x-s.x)!=0){ flag=false; break; } k=i+1; while(true){ e=p[ans[k]]; if((e.x-s.x)*(t.y-s.y)-(e.y-s.y)*(t.x-s.x)!=0){ break; } k++; if(k>=cnt) break; } if(k>=cnt) break; } if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}

  

转载于:https://www.cnblogs.com/jie-dcai/p/3883602.html

你可能感兴趣的文章
Robust PCA via Outlier Pursuit
查看>>
实战练习细节(分行/拼接字符串/字符串转int/weak和copy)
查看>>
wddm 部署问题解决
查看>>
Strict Standards: Only variables should be passed by reference
查看>>
Slab-based Intersection
查看>>
将输入流转为字符串工具类
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
高斯消元
查看>>
AngularJs表单验证
查看>>
regasm.exe 注册dll
查看>>
什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁
查看>>
静态方法是否属于线程安全
查看>>
fegin 调用源码分析
查看>>
Linux的基本命令
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
sql 语法大全
查看>>
SQLite移植手记1
查看>>
Java AmericanFlagSort
查看>>
Mysql远程连接报错
查看>>
C# windows程序应用与JavaScript 程序交互实现例子
查看>>