uva 10112 - Myacm Triangles 简单计算几何+枚举
来源:互联网 发布:苹果mac软件免费下载 编辑:程序博客网 时间:2024/05/21 09:50
题意:求组成三角形的最大面积的三个点 在这三个点的中间边上不能有点
最多15个点 枚举所有情况不会超时 还有一个知识就是判断点是否在三角形内 这用的是面积判别法 还有射线法和转角法 就不介绍了有兴趣的自己查查资料
下面看代码
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;struct Point{ int x,y,ok;//整数就是好不用考虑精度 char c;}s[15],str[3],tr[3];typedef struct Point point;int num[15],N;int area_max;int cmp(point a, point b){ if(a.c < b.c)return 1;}int Area(point p1,point p2,point pb)//其实这道题不用double都能过 我直接改int了{ return fabs((p1.x-pb.x)*(p2.y-pb.y)-(p2.x-pb.x)*(p1.y-pb.y));}int Solve(){ int area = Area(str[0],str[1],str[2]); if(area < area_max) return 0;//比当前的面积还小 题目说了不会出现两个面积相等的 int sum = 0; for(int i = 0; i < N; i++) { if(s[i].ok)continue;//选出来的点不参与计算 sum = Area(s[i],str[1],str[2])+ Area(s[i],str[1],str[0])+ Area(s[i],str[0],str[2]); if(area == sum)return 0;//在三角形内就退出 } //不在三角形内执行下面的操作 area_max = area; for(int i = 0; i < 3; i++) tr[i]=str[i];}void combine(int n, int m,const int M ){ for(int i=n; i>=m; i--) // 注意这里的循环范围 { num[m-1]= i - 1; if (m > 1) combine(i-1,m-1,M); else // m == 1, 输出一个组合 { int t = 0; for(int j=M-1; j>=0; j--) { s[num[j]].ok = 1; str[t++] = s[num[j]]; } Solve(); for(int k = 0; k < N; k++)//这一定要记着初始化 找了一个小时才找到错在这里。。 s[k].ok = 0; } }}int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL while((scanf("%d\n",&N),N)!=0) { for(int i = 0; i < N; i++) { scanf("%c%d%d\n",&s[i].c,&s[i].x,&s[i].y); s[i].ok = 0; } area_max = 0; combine(N,3,3);//枚举3个点的所有组合 sort(tr,tr+3,cmp); for(int i = 0; i < 3; i++) printf("%c",tr[i].c); printf("\n"); } return 0;}
- uva 10112 - Myacm Triangles 简单计算几何+枚举
- UVa 10112 Myacm Triangles (枚举&计算几何)
- Myacm Triangles hoj,poj,uva 计算几何
- UVA 10112 (暑假-几何- D - Myacm Triangles)
- UVa 10112 Myacm Triangles
- uva 10112 - Myacm Triangles
- UVA-10112 - Myacm Triangles
- UVa 10112 - Myacm Triangles
- UVa 10112 - Myacm Triangles
- Uva 10112 - Myacm Triangles
- uva 10112 Myacm Triangles
- UVA 10112 Myacm Triangles
- UVA 10112 - Myacm Triangles
- uva 10112 Myacm Triangles
- UVa 10112 - Myacm Triangles
- UVa 10112 - Myacm Triangles
- Uva 10112 Myacm Triangles
- UVA - 10112 Myacm Triangles
- .net下使用memcached分布式缓存数据
- LeetCode-Next Permutation
- Python写的百度贴吧的网络爬虫
- lib文件格式分析
- Android有道词典开发
- uva 10112 - Myacm Triangles 简单计算几何+枚举
- 通识与专业结合的大学之路
- 舒琴:技术人员应真正学会的第二课
- Wi-Fi Direct
- 字母重排
- html5 第六章 svg 路径
- Ubuntu13.04 Chrome安装
- Struts2 设置List值时出错:ognl.OgnlException: source is null for getProperty(null, "0")
- Nginx 利用if判断