标签:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19099
给定一些点,求构成三角形最大面积,并且这个三角形不能不能包含其他点(在边上也不行)。
因为数据范围很小,所以直接枚举就好,并且还把面积公式告诉了我们,判断点在三角形内的方法是,这个点与其他顶点的面积之和是否等于这个三角形的面积。
#include<cstdio> #include<cmath> struct point { char z; int x,y; }p[20]; double area(point a,point b,point c) { return fabs(0.5*((c.y-a.y)*(b.x-a.x)-(b.y-a.y)*(c.x-a.x))); } bool check(point a,point b,point c,point d) { if((area(a,b,d)+area(b,d,c)+area(a,d,c))==area(a,b,c)) return 1; else return 0; } int main() { //freopen("a.txt","r",stdin); int n,i,j,k,l; while(~scanf("%d",&n)) { if(n==0) break; getchar(); for(i=0;i<n;i++) { scanf("%c %d %d",&p[i].z,&p[i].x,&p[i].y); //printf("%c %d %d\n",p[i].z,p[i].x,p[i].y); getchar(); } double s,sum=0; char a,b,c; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { for(k=j+1;k<n;k++) { s=area(p[i],p[j],p[k]); if(s>sum) { for(l=0;l<n;l++) { if(l!=i&&l!=j&&l!=k&&check(p[i],p[j],p[k],p[l])) break; } if(l==n) { sum=s; a=p[i].z; b=p[j].z; c=p[k].z; } } } } } printf("%c%c%c\n",a,b,c); } return 0; }
UVA - 10061 How many zero's and how many digits ?
标签:
原文地址:http://blog.csdn.net/u012773338/article/details/42030341