注意精度就好啦
#include<stdio.h>
#include<math.h>
struct _point
{
double x,y;
char c;
};
struct _point point[50];
double area(double x1,double y1,double x2,double y2,double x3,double y3)
{
return fabs(0.5 * ((y3 - y1)*(x2 - x1) - (y2 - y1)*(x3 - x1)) );
}
int t_is_in(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4)
{
//(x1-x4,y1-y4),(x2-x4,y2-y4),(x3-x4,y4-y4)
double s1=area(x1,y1,x2,y2,x4,y4);
double s2=area(x1,y1,x3,y3,x4,y4);
double s3=area(x2,y2,x3,y3,x4,y4);
double s=area(x1,y1,x2,y2,x3,y3);
if(fabs(s1+s2+s3-s)<1e-10)
return 1;
return 0;
}
int main()
{
int a,b,c,i,j,k,t,n,in;
double s,max;
while(scanf("%d",&n)!=EOF&&n)
{
for(i=0;i<n;i++)
{
getchar();
scanf("%c%lf%lf",&point[i].c,&point[i].x,&point[i].y);
}
max=-1000000.0f;
for(i=0;i<n-2;i++)
{
for(j=i+1;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
in=0;
for(t=0;t<n;t++)
{
if(t!=i&&t!=j&&t!=k)
{
if(t_is_in(point[i].x,point[i].y,point[j].x,point[j].y,point[k].x,point[k].y,point[t].x,point[t].y))
{
in=1;
break;
}
}
}
if(in)
continue;
s=area(point[i].x,point[i].y,point[j].x,point[j].y,point[k].x,point[k].y);
if(s>max)
{
max=s;
a=i;
b=j;
c=k;
}
}
}
}
printf("%c%c%c\n",point[a].c,point[b].c,point[c].c);
}
return 0;
}