#include<stdio.h>
#include<math.h>
/*由于数据量较小,利用穷举即可,判断一个点是否在三角形内部时,用面积策略容易实现*/
double AcquireS(double x1,double x2,double x3,double y1,double y2,double y3)
{
return fabs(0.5*((y3 - y1)*(x2 - x1)-(y2 - y1)*(x3 - x1)));
}
int judge(double x1,double x2,double x3,double x4,double y1,double y2,double y3,double y4)
{
double total,x,y,z,init;
init=AcquireS(x1,x2,x3,y1,y2,y3);
x=AcquireS(x4,x2,x3,y4,y2,y3);
y=AcquireS(x1,x4,x3,y1,y4,y3);
z=AcquireS(x1,x2,x4,y1,y2,y4);
total=x+y+z;
if(total==init)return 0;//三角形内有点
else return 1;//无点
}
int main()
{
freopen("10112in.txt","r",stdin);
freopen("10112out.txt","w",stdout);
int i,j,k,m,n,first,second,third,flag;
double monu[20][2];
char c;
double area,max;
while(scanf("%d",&n)&&n)
{
max=0;
getchar();
for(i=0;i<n;i++)scanf("%c%lf%lf\n",&c,&monu[i][0],&monu[i][1]);
for(i=0;i<n-2;i++)
{
for(j=i+1;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
flag=0;
for(m=0;m<n;m++)
{
if(m!=i&&m!=j&&m!=k)
{
flag=judge(monu[i][0],monu[j][0],monu[k][0],monu[m][0],monu[i][1],monu[j][1],monu[k][1],monu[m][1]);
if(!flag)break;
}
}
if(flag)
{
area=AcquireS(monu[i][0],monu[j][0],monu[k][0],monu[i][1],monu[j][1],monu[k][1]);
if(area>max)
{
max=area;
first=i;
second=j;
third=k;
}
}
}
}
}
printf("%c%c%c\n",first+'A',second+'A',third+'A');
}
return 0;
}
UVA - 10112 - Myacm Triangles
最新推荐文章于 2017-09-06 15:45:54 发布