暴力枚举+向量优化: { Author:wzx961008 Problem:UVa 10112-Myacm Triangles Verdict:Accepted Language:PASCAL Run Time:0.008s Submission Date:2011-01-13 08:28:55 } type point=record x,y:longint; end; var pillar:array['A'..'O']of point; i,j,k,l,c,ansa,ansb,ansc:char; n,ii:longint; max:extended; function distance(a,b:point):extended; begin exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y))); end; function nopoint(a,b,c:point):boolean; var alab,blbc,clca:extended; l:char; begin for l:='A' to chr(n+64) do if (l<>i)and(l<>j)and(l<>k) then begin alab:=((pillar[l].x-a.x)*(b.y-a.y)-(pillar[l].y-a.y)*(b.x-a.x))/distance(a,b); blbc:=((pillar[l].x-b.x)*(c.y-b.y)-(pillar[l].y-b.y)*(c.x-b.x))/distance(b,c); clca:=((pillar[l].x-c.x)*(a.y-c.y)-(pillar[l].y-c.y)*(a.x-c.x))/distance(c,a); if ((alab>0)and(blbc>0)and(clca>0))or((alab<0)and(blbc<0)and(clca<0)) then exit(false); if ((alab=0)and(((blbc>0)and(clca>0))or((blbc<0)and(clca<0)))) or((blbc=0)and(((alab>0)and(clca>0))or((alab<0)and(clca<0)))) or((clca=0)and(((alab>0)and(blbc>0))or((alab<0)and(blbc<0)))) then exit(false); end; nopoint:=true; end; function S(a,b,c:point):extended; var aa,bb,cc,p:extended; begin aa:=distance(b,c); bb:=distance(a,c); cc:=distance(a,b); p:=(aa+bb+cc)/2; exit(sqrt(p*(p-aa)*(p-bb)*(p-cc))); end; begin repeat readln(n); if n=0 then break; for ii:=1 to n do readln(c,pillar[c].x,pillar[c].y); max:=0; for i:='A' to chr(n+62) do for j:=chr(ord(i)+1) to chr(n+63) do for k:=chr(ord(j)+1) to chr(n+64) do if (nopoint(pillar[i],pillar[j],pillar[k]))and(S(pillar[i],pillar[j],pillar[k])>max) then begin max:=S(pillar[i],pillar[j],pillar[k]); ansa:=i; ansb:=j; ansc:=k; end; writeln(ansa,ansb,ansc); until false; end.