凸包稳定性判断:每条边上是否至少有三点 POJ 1228
- //凸包稳定性判断:每条边上是否至少有三点
- // POJ 1228
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <algorithm>
- #include <vector>
- #include <math.h>
- using namespace std;
- #define LL long long
- typedef pair<int,int> pii;
- const double inf = 0x3f3f3f3f;
- const LL MOD =100000000LL;
- const int N =;
- #define clc(a,b) memset(a,b,sizeof(a))
- const double eps = 1e-;
- void fre() {freopen("in.txt","r",stdin);}
- void freout() {freopen("out.txt","w",stdout);}
- inline int read() {int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-; ch=getchar();}while(ch>=''&&ch<='') {x=x*+ch-'';ch=getchar();}return x*f;}
- int sgn(double x){
- if(fabs(x) < eps)return ;
- if(x < )return -;
- else return ;
- }
- struct Point{
- double x,y;
- Point(){}
- Point(double _x,double _y){
- x = _x;y = _y;
- }
- Point operator -(const Point &b)const{
- return Point(x - b.x,y - b.y);
- }
- double operator ^(const Point &b)const{
- return x*b.y - y*b.x;
- }
- double operator *(const Point &b)const{
- return x*b.x + y*b.y;
- }
- friend bool operator<(const Point &a,const Point &b){
- if(fabs(a.y-b.y)<eps) return a.x<b.x;
- return a.y<b.y;
- }
- friend double dis2(Point a){
- return a.x*a.x+a.y*a.y;
- }
- };
- double dis(Point a,Point b){
- return sqrt(dis2(a-b));
- }
- int mult(Point a,Point b,Point o){
- return sgn((a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y));
- }
- //返回top个点
- int graham(Point p[],int n,Point q[]){
- int top=;
- sort(p,p+n);
- if(n==) return ;
- q[]=p[];
- if(n==) return ;
- q[]=p[];
- if(n==) return ;
- q[]=p[];
- for(int i=;i<n;i++){
- while(top&&(mult(p[i],q[top],q[top-])>)) top--;
- q[++top]=p[i];
- }
- int len=top;
- q[++top]=p[n-];
- for(int i=n-;i>=;i--){
- while(top!=len&&(mult(p[i],q[top],q[top-])>)) top--;
- q[++top]=p[i];
- }
- return top;
- }
- // 判断凸包边上是否至少有三点
- bool judge(Point p[],int m){
- p[m]=p[];
- p[m+]=p[];
- for(int i=;i<m;i++){
- if(mult(p[i-],p[i+],p[i])!=&&mult(p[i],p[i+],p[i+])!=)
- return false;
- }
- return true;
- }
- Point p[];
- Point ch[];
- int main(){
- // fre();
- int T;
- scanf("%d",&T);
- while(T--){
- int n;
- scanf("%d",&n);
- for(int i=;i<n;i++){
- double x,y;
- scanf("%lf%lf",&x,&y);
- p[i]=Point(x,y);
- }
- int m=graham(p,n,ch);
- if(n<) {
- puts("NO");
- continue;
- }
- if(judge(ch,m)) puts("YES");
- else puts("NO");
- }
- return ;
- }
凸包稳定性判断:每条边上是否至少有三点 POJ 1228的更多相关文章
- POJ 1228 (稳定凸包问题)
<题目链接> <转载于 >>> > 首先来了解什么是稳定的凸包.比如有4个点: 这四个点是某个凸包上的部分点,他们连起来后确实还是一个凸包.但是原始的凸包可 ...
- POJ 1228 - Grandpa's Estate 稳定凸包
稳定凸包问题 要求每条边上至少有三个点,且对凸包上点数为1,2时要特判 巨坑无比,调了很长时间= = //POJ 1228 //稳定凸包问题,等价于每条边上至少有三个点,但对m = 1(点)和m = ...
- Grandpa's Estate - POJ 1228(稳定凸包)
刚开始看这个题目不知道是什么东东,后面看了大神的题解才知道是稳定凸包问题,什么是稳定凸包呢?所谓稳定就是判断能不能在原有凸包上加点,得到一个更大的凸包,并且这个凸包包含原有凸包上的所有点.知道了这个东 ...
- POJ 1228 Grandpa's Estate(凸包唯一性判断)
Description Being the only living descendant of his grandfather, Kamran the Believer inherited all o ...
- 如何判断一条sql(update,delete)语句是否执行成功
如何判断一条sql(update,delete)语句是否执行成功 catch (SQLException e) { } catch不到错误应该就成功了. ============== ...
- java判断用户输入的是否至少含有N位小数
判断用户输入的是否至少含有N位小数. 1.当用户输入的是非数字时抛出异常,返回false. 2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false. 3.当用户输入的数字的小 ...
- 如何判断一条记录什么字段被修改了 [问题点数:40分,结帖人bluesukeke]
查询出来数据,在数据集编辑状态下,如何判断一条记录被修改了,哪些字段被修改了. 可用adoquery的Delta屬性...eg: ClientDataSet1.Delta... PS:POST前是準確 ...
- MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转
转自:http://blog.csdn.net/panshiqu/article/details/9369891# 将多个工具条同时并列停靠在某窗口的某一条边上.对于这种停靠方法,利用上述工具条控制函 ...
- POJ1269:Intersecting Lines(判断两条直线的关系)
题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...
随机推荐
- rqnoj-106-最大加权矩形-dp
和我之前做的那个切西瓜的题目相比就是小巫见大巫了.. 运用最长字段和的原理把O(n^4)转化成O(n^3) #include<stdio.h> #include<string.h&g ...
- css div居中显示的4种写法
Demo:http://www.feman.cn/h5/center.html .absolute 绝对定位 这是我们最常用的一种居中定位写法 要求必须确定div的宽高度 目前市面上的浏览器基本上都支 ...
- 监控tomcat性能
tomcat经常被用作中间件,也有直接作WEB的,自带的工具不是很给力,推荐以下的办法 工具/原料 javamelody 方法/步骤 下载 javamelody.jar和 jrobin-x.jar ...
- CSS 中浮动的使用
float none 正常显示 left 左浮动 right 右浮动 clear none 允许两边浮动 left 不允许左边浮动 right 不允许右边浮动 both 不允许两边浮动 <!DO ...
- 权限控制框架Shiro简单介绍及配置实例
Shiro是什么 http://shiro.apache.org/ Apache Shiro是一个非常易用的Java安全框架,它能提供验证.授权.加密和Session控制.Shiro非常轻量级,而且A ...
- Git server安装和配置
yum install git yum install git-dameon toiseGit
- 【笨嘴拙舌WINDOWS】设备无关图(*.bmp)
设备无关图在windows上面就是一个扩展名为.bmp的文件.我们知道每一种文件都是一个二进制流,只是这个二进制流的开头几个字节是规定了文件的格式..bmp的文件格式如下 “其中信息头是windows ...
- POJ 3628 Bookshelf 2【01背包】
题意:给出n头牛的身高,以及一个书架的高度,问怎样选取牛,使得它们的高的和超过书架的高度最小. 将背包容量转化为所有牛的身高之和,就可以用01背包来做=== #include<iostream& ...
- BZOJ 4551 树
线段树+标记永久化. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- modeler与activiti进行整合
整合Activiti Modeler到业务系统(或BPM平台) http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler ...