HDU 2108 Shape of HDU 判断多边形凹凸

来源:互联网 发布:java 图片上传 跨域 编辑:程序博客网 时间:2024/05/20 06:38

Shape of HDU

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108


题目大意:逆时针给出n个点,围成一个多边形,判断该多边形的凹凸性。


题目思路:按顺序依次取三个点,构成向量AB BC,然后求AB*BC的叉乘,因为题目给出的点是按逆时针的,所以若叉乘结果为负则为凹,反之为凸。


代码:

#include<iostream>#include<cstdio>using namespace std;#define N 100010typedef struct{    int x,y;}Point;int Judge(int x1,int y1,int x2,int y2){    return x1*y2-x2*y1;}Point p[N];int main(){    int n;    while(scanf("%d",&n)&&n){        for(int i=0;i<n;i++){            scanf("%d%d",&p[i].x,&p[i].y);        }        int ok=1;        for(int i=0;i<n;i++){            if( Judge(p[(i+1)%n].x-p[i].x, p[(i+1)%n].y-p[i].y, p[(i+2)%n].x-p[i].x, p[(i+2)%n].y-p[i].y)<0){                ok=0;                break;            }        }        if(ok) printf("convex\n");        else printf("concave\n");    }    return 0;}


0 0
原创粉丝点击