HDU-2108--Shape of HDU---利用叉积判断凹凸多边形
来源:互联网 发布:安卓触屏修护软件 编辑:程序博客网 时间:2024/06/05 04:07
Description
话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,“徐队”的称呼逐渐被“徐总”所取代,海东集团(HDU)也算是名副其实了。
创业是需要地盘的,HDU向钱江肉丝高新技术开发区申请一块用地,很快得到了批复,据说这是因为他们公司研发的“海东牌”老鼠药科技含量很高,预期将占全球一半以上的市场。政府划拨的这块用地是一个多边形,为了描述它,我们用逆时针方向的顶点序列来表示,我们很想了解这块地的基本情况,现在请你编程判断HDU的用地是凸多边形还是凹多边形呢?
Input
输入包含多组测试数据,每组数据占2行,首先一行是一个整数n,表示多边形顶点的个数,然后一行是2×n个整数,表示逆时针顺序的n个顶点的坐标(xi,yi),n为0的时候结束输入。
Output
对于每个测试实例,如果地块的形状为凸多边形,请输出“convex”,否则输出”concave”,每个实例的输出占一行。
Sample Input
4
0 0 1 0 1 1 0 1
0
Sample Output
convex
解题思路:这个题如果运用凸包思路很容易解决,只需要判断扫描之后的凸包里面的元素个数和题目中给的点的个数是否相等即可,若相等则输出“convex”,否则输出“concave”。
此处附上凸包模板:
凸包模板
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<iomanip>#define sf scanfusing namespace std;const int M=50000+10;const int MAX=0x3f3f3f3f;double xx=MAX,yy=MAX;struct point{ double x; double y;} s[M+50],p[M+50];double cross(double x1,double y1,double x2,double y2){ return x1*y2-x2*y1;}double compare(point a,point b,point c){ return cross(b.x-a.x,b.y-a.y,c.x-a.x,c.y-a.y);}bool cmp(point a,point b){ point c; c.x=xx; c.y=yy; if(compare(a,b,c)==0) return a.x<b.x; else return compare(a,b,c)>0;}double Caculate(double x1,double y1,double x2,double y2){ return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}int main(){ int n; while(~sf("%d",&n),n) { xx=MAX,yy=MAX;//这里的xx和yy要重新赋值,之前因为没有重新复制WA了一次 int i; int t=0; for(i=0; i<=n-1; i++) { sf("%lf%lf",&p[i].x,&p[i].y); if(p[i].y<yy) { xx=p[i].x; yy=p[i].y; t=i; } } p[t]=p[0]; sort(p+1,p+n,cmp); int top=1; s[0].x=xx; s[0].y=yy; s[1]=p[1]; for(i=2; i<=n-1;) { if(top!=0&&compare(s[top-1],s[top],p[i])<0) top--; else s[++top]=p[i++]; } if(top==n-1)//判断点的个数是否相等 cout<<"convex"<<endl; else cout<<"concave"<<endl; }}
阅读全文
0 0
- HDU-2108--Shape of HDU---利用叉积判断凹凸多边形
- HDU 2108 Shape of HDU 判断多边形凹凸
- HDOJ 2108 Shape of HDU (判断凹凸多边形)
- ACM--多边形凹凸判断--HDOJ 2108--Shape of HDU
- HDU2108 Shape of HDU - 计算几何 判断凹凸多边形
- Shape of HDU 几何问题判断多边形凹凸性
- hdu 2108 判断多边形的凹凸
- Shape of HDU(hdu2108,叉乘判断多边凹凸性)
- hdoj2108Shape of HDU【凹凸多边形的判定】
- hdu 2108 判断凹凸
- hdu 2108 Shape of HDU(判断多边形是否为凸多边形)
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
- hdu 2108 Shape of HDU(判断多边形是凸凹边形)
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
- hdu-2108-Shape of HDU(凸凹多边形的判定)
- HDU 2108 Shape of HDU(凸or凹多边形判定)
- HDU 2108 Shape of HDU(凸or凹多边形判定)
- (hdu step 7.1.1)Shape of HDU(判断一个多边形是否是凸多边形)
- 【读书笔记】Java整合Ceph radowsgw 和 Amazon S3
- Ceph和Swift的比较-为什么他们没有撕逼
- 【Java】Ceph对Swift的支持及Java…
- centos 7安装Docker,并配置加速器
- 基于SpringDataJpa的mysql动态分页多表查询
- HDU-2108--Shape of HDU---利用叉积判断凹凸多边形
- python绘线(简单)
- 简单dp 完全背包
- Android属性动画深入分析
- 百度地图之鹰眼轨迹V3之初探
- 开机 出现Failed to start Load Kernel Modules(Archlinux)
- HDU5143 NPY and arithmetic progression【暴力】
- 关于初学者nginx启动 但是无法通过IP地址访问的解决办法!
- 数据库导出EXCEL后0丢失