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 100010
typedef 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;
}