poj 1569

来源:互联网 发布:cv 怎么写 知乎 编辑:程序博客网 时间:2024/05/29 15:04
# include <stdio.h># include <stdlib.h>struct node{    int x,y;}vex[20];int cross(node a,node b,node c){    return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}int area(node a,node b,node c){    return abs(cross(a,b,c));}int solve(int i,int j,int k,int m){    if(cross(vex[i],vex[j],vex[m])<=0&&cross(vex[j],vex[k],vex[m])<=0&&cross(vex[k],vex[i],vex[m])<=0||       cross(vex[i],vex[j],vex[m])>=0&&cross(vex[j],vex[k],vex[m])>=0&&cross(vex[k],vex[i],vex[m])>=0)    return 1;    else        return 0;}int main (){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0)  break;        char c;        for(int i=0;i<n;i++)        {            c=getchar();            c=getchar();            scanf("%d%d",&vex[i].x,&vex[i].y);        }        int mark=0,mmax=0,ans,ii,jj,kk;        for(int i=0;i<n;i++)            for(int j=i+1;j<n;j++)                for(int k=j+1;k<n;k++)                {                    mark=0;                    if(cross(vex[i],vex[j],vex[k])==0)                        continue;                    for(int m=0;m<n;m++)                    {                        if(m==i||m==j||m==k) continue;                        if(solve(i,j,k,m))                            {mark=1;break;}                    }                    //printf("mark===%d\n",mark);                    if(mark==1)  continue;                    ans=area(vex[i],vex[j],vex[k]);                    //printf("ans=====%d\n",ans);                    if(ans>mmax)                    {                        mmax=ans;                        ii=i;jj=j;kk=k;                    }                }        printf("%c%c%c\n",ii+'A',jj+'A',kk+'A');    }    return 0;}
注意判断点在三角形内部的判断
0 0
原创粉丝点击