UVA-10112
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <cctype> // #include "debug.h" using namespace std; //浮点数陷阱比较时必须用绝对值abs,因为是比较是否在误差内相等。 struct X{ char name; long long x,y; X(char name,long long x,long long y){ this->x=x;this->y=y; this->name=name; } X(){} } a[16]; double area(int i,int j,int k){ return abs(0.5*((a[k].y-a[i].y)*(a[j].x-a[i].x)-(a[j].y-a[i].y)*(a[k].x-a[i].x))); } bool ok(int i,int j,int k,long long x){ if(i==j||i==k||j==k) return false; if(a[i].x==a[j].x&&a[j].x==a[k].x&&a[i].y==a[j].y&&a[j].y==a[k].y) return false; //neibu for(int p=0;p<x;p++){ if(p!=i&&p!=j&&p!=k){ double ss=area(i,j,k),s1=area(i,j,p),s2=area(i,k,p),s3=area(k,p,j),ss1; // printf("sad %.2f %2.f %.2f %.2f\n",ss,s1,s2,s3); ss1=s1+s2+s3; // cout<<ss1<<endl; if(abs(ss-ss1)<1e-6) return false; } } return true; } int main(){ // std::ofstream file; // file.open(OUTPUT_FILE, std::ios::out); long long x,y,d1,d2; double smax=0; char cmax[4],c1; while (cin>>x&&x!=0) { smax=0; for(int i=0;i<x;i++){ cin>>c1>>d1>>d2; a[i]=X(c1,d1,d2); } // cout<<ok(1,2,3,x)<<endl; for(int i=0;i<x;i++){ for(int j=0;j<x;j++){ for(int k=0;k<x;k++){ if(ok(i,j,k,x)){ double ss=area(i,j,k); // cout<<"ok"<<ss<<endl; if(ss>smax){ smax=ss; cmax[0]=a[i].name; cmax[1]=a[j].name; cmax[2]=a[k].name; } } } } } cmax[4]='\0'; cout<<cmax<<endl; // file<<cmax<<endl; // cout<<smax<<endl;s } return 0; }