这题也是醉了,本来应该一发AC的,debug了好久发现原来只是下面求面积的时候忘记加绝对值了,醉了。三角形判定点注意绝对值的问题。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<string>
#include<cmath>
using namespace std;
const double eps=1e-6;
int dcmp(double x)
{
if(fabs(x)<eps)
return 0;
else
return x>0?1:-1;
}
struct point
{
char c;
int x,y;
};
int dot(point a,point b)
{
return a.x*b.x+a.y*b.y;
}
int cross(point a,point b)
{
return a.x*b.y-a.y*b.x;
}
double area(point a,point b,point c)
{
return 0.5*((c.y-a.y)*(b.x-a.x)-(b.y-a.y)*(c.x-a.x));
}
bool inside(point a,point b,point c,point d)
{
if(dcmp(fabs(area(b,c,d))-fabs(area(a,b,c))-fabs(area(a,c,d))-fabs(area(a,d,b)))==0)
return 0;
return 1;
}
int main()
{
int n;
while(cin>>n&&n)
{
getchar();
point a[30];
for(int i=0;i<n;i++)
{
cin>>a[i].c>>a[i].x>>a[i].y;
}
double Area=0;
char cx,cy,cz;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int z=j+1;z<n;z++)
{
int flag=1;
for(int k=0;k<n;k++)
{
if(k!=i&&k!=j&&k!=z&&inside(a[k],a[i],a[j],a[z])==0)
{
// cout<<i<<j<<z<<k<<endl;
flag=0;
break;
}
}
if(flag)
{
double area2=fabs(area(a[i],a[j],a[z]));
if(area2>Area)
{
// cout<<"haha"<<endl;
Area=area2;
cx=a[i].c;
cy=a[j].c;
cz=a[z].c;
}
}
}
}
}
cout<<cx<<cy<<cz<<endl;
}
return 0;
}