HDU 2108 Shape of HDU(凸包判定)

来源:互联网 发布:three.js 源码 编辑:程序博客网 时间:2024/06/15 13:20

Shape of HDU

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8481    Accepted Submission(s): 3895


Problem Description
话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,“徐队”的称呼逐渐被“徐总”所取代,海东集团(HDU)也算是名副其实了。
创业是需要地盘的,HDU向钱江肉丝高新技术开发区申请一块用地,很快得到了批复,据说这是因为他们公司研发的“海东牌”老鼠药科技含量很高,预期将占全球一半以上的市场。政府划拨的这块用地是一个多边形,为了描述它,我们用逆时针方向的顶点序列来表示,我们很想了解这块地的基本情况,现在请你编程判断HDU的用地是凸多边形还是凹多边形呢?
 

Input
输入包含多组测试数据,每组数据占2行,首先一行是一个整数n,表示多边形顶点的个数,然后一行是2×n个整数,表示逆时针顺序的n个顶点的坐标(xi,yi),n为0的时候结束输入。
 

Output
对于每个测试实例,如果地块的形状为凸多边形,请输出“convex”,否则输出”concave”,每个实例的输出占一行。
 

Sample Input
40 0 1 0 1 1 0 10
 

Sample Output
convex海东集团终于顺利成立了!后面的路,他们会顺顺利利吗?欲知后事如何,且听下回分解——


判断是否凸包

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<queue>#include<stack>#include<vector>#include<cstring>#include<string>#include<algorithm>using namespace std;#define ll long long#define ms(a,b)memset(a,b,sizeof(a))#define eps 1e-10#define inf 1e8double a[4][4] = { {0,0,0,0},{0,-1,0,0},{0,0,0,-1},{0,-1,0,-1} } ;int n;double add(double a,double b){    if(abs(a+b)<eps*(abs(a)+abs(b))) return 0;    return a+b;}struct P{    double x,y;    double val;    double len;    P(){}    P(double x,double y): x(x),y(y){}    P operator + (P p)    {        return P(add(x,p.x),add(y,p.y));    }    P operator - (P p)    {        return P(add(x,-p.x),add(y,-p.y));    }    P operator *(double d)    {        return P(x*d,y*d);    }    double dot (P p)    {        return add(x*p.x,y*p.y);    }    double det(P p)    {        return add(x*p.y,-y*p.x);    }}p[2000];bool on_seg(P p1,P p2,P q){    return (p1-q).det(p2-q)==0&&(p1-q).dot(p2-q)<=0;}P intersection(P p1,P p2,P q1,P q2){    return p1+(p2-p1)*((q2-q1).det(q1-p1)/(q2-q1).det(p2-p1));}bool cmp_x(const P& p,const P & q){    if(p.x!=q.x) return p.x<q.x;    return p.y<q.y;}vector<P> convex_hull(P *ps,int n){    sort(ps,ps+n,cmp_x);    int k=0;    vector<P> qs(n*2);    if(n==0) return qs;    for(int i=0;i<n;i++)    {        while(k>1&&(qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--;        qs[k++]=ps[i];    }    for(int i=n-2,t=k;i>=0;i--)    {        while(k>t&&(qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--;        qs[k++]=ps[i];    }    qs.resize(k-1);    return qs;}struct node{    double extrawood;    double val;    int flag;    int cnt;}ans;int main(){    int n;    while(~scanf("%d",&n),n)    {        for(int i=0;i<n;i++)            scanf("%lf%lf",&p[i].x,&p[i].y);        if(n==2)        {            cout<<"concave"<<endl;            continue;        }        vector<P> q=convex_hull(p,n);        if((int)q.size()==n) cout<<"convex"<<endl;        else cout<<"concave"<<endl;    }    return 0 ;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 化妆品盖子碎了怎么办 自制水泵压力小怎么办 大学数学不会做怎么办 下雪了怎么办教案幼儿园小班 下水道被混凝土堵塞怎么办 日本足贴丢了胶布怎么办 牙齿被可乐腐蚀怎么办 三十岁满嘴无牙怎么办 水乳盖子打不开怎么办 蜂蜜罐子打不开了怎么办 蜂蜜盖子第二次拧不开怎么办 玻璃杯子拧不开盖子怎么办 玻璃杯水杯盖子拧不开怎么办 鞋子蝴蝶结掉了怎么办 蝴蝶翅膀受伤了怎么办 手被割了个口子怎么办 致炫方向盘重怎么办 黑檀7打不透怎么办 乒乓球底板太轻怎么办 狙击精英4卡怎么办 鼠标点一下变两下怎么办 工程干完不给钱怎么办 屋里有大蛾子怎么办 房间很多小飞虫怎么办 雷蛇键盘失灵怎么办 xp驱动 不支持win10怎么办 阿提拉全面战争统治度太低怎么办 微信号变成wxid怎么办 ipv4 ipv6未连接怎么办 土豆丝粘锅怎么办还面 土豆丝容易碎怎么办 胡萝卜的菱形块怎么办 茄子多了吃不完怎么办 炒木耳会爆怎么办 土豆丸子太粘怎么办 兔子吃多了怎么办 兔子把多肉吃了怎么办 小兔子不吃东西怎么办 兔子一直抓木板怎么办 手动挡离合踩着脚疼怎么办 小狗吃了芋头怎么办