您的位置:首页 > 其它

UVA - 10112 Myacm Triangles

2016-07-13 14:16 344 查看

UVA - 10112 Myacm Triangles

题目大意:给出4 - 10点, 求 面积最大的三角形 三角形内不能包含其他点

解题思路:数据量较小 可以暴力做, 然后判断点是否在三角形内 可以用 这个点 和 三角形的 每两条边 形成的三个三角形 的面积总和 是否和原三角形相等来判断

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
int cmp (const void *_a,const void *_b) {
char *a = (char *)_a;
char *b = (char *)_b;
return strcmp(a,b);
}
int main() {
int N;
scanf("%d", &N);
int flag ;
double d1[100],d2[100];
while ( N) {
getchar();
for (int i = 0; i < N; i++) {
getchar();
getchar();
scanf("%lf%lf", &d1[i], &d2[i]);
}
double max = 0;
char q[3];
double a,b,c,p,s;
for (int i = 0; i < N; i++)
for (int j = i+1; j < N; j++)
for (int k = j+1; k < N; k++) {
if ( i == j || i == k || j == k) continue;
a = sqrt((d1[i] -d1[j])*(d1[i]-d1[j])+(d2[i] -d2[j])*(d2[i]-d2[j])) ;
b = sqrt((d1[i] -d1[k])*(d1[i]-d1[k])+(d2[i] -d2[k])*(d2[i]-d2[k])) ;
c =  sqrt((d1[k] -d1[j])*(d1[k]-d1[j])+(d2[k] -d2[j])*(d2[k]-d2[j]));
p = ( a + b + c)/2;
s = sqrt(p*(p-a)*(p-b)*(p-c));
if ( s > max) {
flag = 1;
for (int l = 0; l < N; l++) {
if (i == l || j == l || k == l) continue;
double d11 = sqrt((d1[i] -d1[j])*(d1[i]-d1[j])+(d2[i] -d2[j])*(d2[i]-d2[j]))    ;
double d22 = sqrt((d1[l] -d1[j])*(d1[l]-d1[j])+(d2[l] -d2[j])*(d2[l]-d2[j]))    ;
double d33 = sqrt((d1[i] -d1[l])*(d1[i]-d1[l])+(d2[i] -d2[l])*(d2[i]-d2[l]))    ;
double p1 = (d11 + d22 + d33)/2;
double s1 = sqrt(p1*(p1-d11)*(p1-d22)*(p1-d33));
double d4 = sqrt((d1[k] -d1[j])*(d1[k]-d1[j])+(d2[k] -d2[j])*(d2[k]-d2[j])) ;
double d5 = sqrt((d1[l] -d1[j])*(d1[l]-d1[j])+(d2[l] -d2[j])*(d2[l]-d2[j])) ;
double d6 = sqrt((d1[k] -d1[l])*(d1[k]-d1[l])+(d2[k] -d2[l])*(d2[k]-d2[l])) ;
double p2 = (d4 + d5 + d6)/2;
double s2 = sqrt(p2*(p2-d4)*(p2-d5)*(p2-d6));
double d7 = sqrt((d1[i] -d1[k])*(d1[i]-d1[k])+(d2[i] -d2[k])*(d2[i]-d2[k])) ;
double d8 = sqrt((d1[l] -d1[k])*(d1[l]-d1[k])+(d2[l] -d2[k])*(d2[l]-d2[k])) ;
double d9 = sqrt((d1[i] -d1[l])*(d1[i]-d1[l])+(d2[i] -d2[l])*(d2[i]-d2[l])) ;
double p3 = (d7 + d8 + d9)/2;
double s3 = sqrt(p3*(p3-d7)*(p3-d8)*(p3-d9));
if ( fabs(s-s1-s2-s3) < 1e-9 ) flag = 0;

}

if (flag) {
max = s;
q[0] = i+'A';
q[1] = j + 'A';
q[2] = k + 'A';
flag = 0;
}
}
}

qsort(q, 3, sizeof(q[0]), cmp);
printf("%c%c%c\n", q[0],q[1], q[2]);
scanf("%d", &N);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: