http://acm.hdu.edu.cn/showproblem.php?pid=2108
这题是用矢量相乘来判断拐向的,三个点a,b,c,矢量叉乘(b-a)×(c-b)为正就左拐,否则右拐,出现右拐就是凹的
#include<stdio.h> #include<math.h> int x[1000000],y[1000000],n; int con(int a,int b,int c) { int s,x1,x2,y1,y2; x1=x[b]-x[a]; y1=y[b]-y[a]; x2=x[c]-x[b]; y2=y[c]-y[b]; s=x1*y2-y1*x2; return s>0; } int main() { int i,flag; while(scanf("%d",&n),n) { flag=0; for(i=0;i<n;i++) { scanf("%d%d",&x[i],&y[i]); if(i>1) if(con(i-2,i-1,i)==0)flag=1; } if(con(i-2,i-1,0)==0||con(i-1,0,1)==0)flag=1; if(flag)printf("concave "); else printf("convex "); } return 0; }