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); } }
相关文章推荐
- Codeforces Round #361 div2
- 未看记录
- 实习小记3
- UVA - 10387 Billiard
- HDOJ 1275 两车追及或相遇问题
- MySQL学习系列(2) -- MySQL数据库生产环境的安装和升级
- EventBus事件总线分发库
- UVA - 375 Inscribed Circles and Isosceles Triangles
- MongoDB Wiredtiger存储引擎实现原理
- UVA - 579 Clock Hands
- 原生js仿jquery animate动画效果
- linux源码包与RPM包的区别
- UVA - 10250 The Other Two Trees
- 自定义的textView
- WebView与JavaScript的交互
- JSP网页处理过程
- UVA - 10879 Code Refactoring
- spring boot
- UVA - 10392 Factoring Large Numbers
- MySQL:常用操作符、管理命令、基本SQL语法等