10112 - Myacm Triangles

注意精度就好啦

#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;
}

你可能感兴趣的:(ACM)