HDU 2108 Shape of HDU(判断拐点)

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\n");
        else printf("convex\n");
    }
    return 0;
}
View Code

 

posted @ 2013-08-20 23:00  执着追求的IT小小鸟  阅读(184)  评论(0编辑  收藏  举报