HDU 2108 Shape of HDU

http://acm.hdu.edu.cn/showproblem.php?pid=2108

几何计算,判断线段的转向。

View Code
#include <stdio.h>

#include <string.h>

#include <math.h>

typedef struct point{

    int x,y; 

}point;

point kk[100000];

int dis(point p1,point p2,point p3)

{

    return (p3.x-p1.x)*(p2.y-p1.y)-(p2.x-p1.x)*(p3.y-p1.y);

}

int main()

{

    int n,i;

    while(scanf("%d",&n),n)

    {

        for(i=0;i<n;i++)

            scanf("%d%d",&kk[i].x,&kk[i].y);

        int flag,f=0;

        if(dis(kk[0],kk[1],kk[2])>0)

            flag=0;

        else

            flag=1;

        for(i=1;i<n-2;i++)

        {

            if(dis(kk[i],kk[i+1],kk[i+2])<0&&flag==0)

            {

                f=1;

                break;

            }

            if(dis(kk[i],kk[i+1],kk[i+2])>0&&flag)

            {

                f=1;

                break;

            }

        }

        if(dis(kk[n-2],kk[n-1],kk[0])<0&&flag==0)

            f=1;

        if(dis(kk[n-2],kk[n-1],kk[0])>0&&flag)

            f=1;

        if(dis(kk[n-1],kk[0],kk[1])<0&&flag==0)

            f=1;

        if(dis(kk[n-1],kk[0],kk[1])>0&&flag)

            f=1;

        if(f)

            printf("concave\n");

        else

            printf("convex\n");

    }

    return 0;

} 

 

你可能感兴趣的:(shape)