最大三角形

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4015    Accepted Submission(s): 1433

Problem Description
老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大。
Eddy对这道题目百思不得其解,想不通用什么方法来解决,因此他找到了聪明的你,请你帮他解决这个题目。
 
Input
输入数据包含多组测试用例,每个测试用例的第一行包含一个整数n,表示一共有n个互不相同的点,接下来的n行每行包含2个整数xi,yi,表示平面上第i个点的x与y坐标。你可以认为:3
<= n <= 50000 而且 -10000 <= xi, yi <= 10000.
 
Output
对于每一组测试数据,请输出构成的最大的三角形的面积,结果保留两位小数。
每组输出占一行。
 
Sample Input
3
3 4
2 6
3 7
6
2 6
3 9
2 0
8 0
6 6
7 7
 
Sample Output
1.50
27.00
 
Author
Eddy
 
代码:
  1. //最大三角形的顶点一定是凸包的顶点,先求凸包再三重循环用向量算最大的三角形面积。刚开始以为这样会超时竟然没有
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<cmath>
  7. using namespace std;
  8. int n,top;
  9. struct nod
  10. {
  11. double x,y;
  12. }p[],que[];
  13. int xy(nod p0)
  14. {
  15. p0.x-=p[].x;
  16. p0.y-=p[].y;
  17. if(p0.x>=&&p[].y>=) return ;
  18. if(p[].x<=&&p[].y>) return ;
  19. if(p[].x<&&p[].y<=) return ;
  20. if(p[].x>=&&p[].y<) return ;
  21. }
  22. double chaji(nod p0,nod p1,nod p2)
  23. {
  24. return ((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x));
  25. }
  26. bool cmp(nod p1,nod p2)
  27. {
  28. int L1=xy(p1),L2=xy(p2);
  29. if(L1==L2)
  30. {
  31. double tem=chaji(p[],p1,p2);
  32. if(tem>) return ;
  33. if(tem<) return ;
  34. if(tem==)
  35. return p1.x<p2.x;
  36. }
  37. else return L1<L2;
  38. }
  39. void tubao()
  40. {
  41. top=;
  42. que[top].x=p[].x;que[top++].y=p[].y;
  43. que[top].x=p[].x;que[top++].y=p[].y;
  44. que[top].x=p[].x;que[top].y=p[].y;
  45. for(int i=;i<=n;i++)
  46. {
  47. while(chaji(que[top-],que[top],p[i])<=)
  48. top--;
  49. que[++top].x=p[i].x;
  50. que[top].y=p[i].y;
  51. }
  52. }
  53. int main()
  54. {
  55. while(scanf("%d",&n)!=EOF)
  56. {
  57. double Minx=,Miny=;
  58. int Mini;
  59. for(int i=;i<n;i++)
  60. {
  61. scanf("%lf%lf",&p[i].x,&p[i].y);
  62. if(p[i].y<Miny)
  63. {
  64. Miny=p[i].y;
  65. Minx=p[i].x;
  66. Mini=i;
  67. }
  68. else if(p[i].y==Miny&&p[i].x<Minx)
  69. {
  70. Minx=p[i].x;
  71. Mini=i;
  72. }
  73. }
  74. if(n==||n==)
  75. {
  76. printf("0.00\n");
  77. continue;
  78. }
  79. double tem=p[].x;
  80. p[].x=p[Mini].x;
  81. p[Mini].x=tem;
  82. tem=p[].y;
  83. p[].y=p[Mini].y;
  84. p[Mini].y=tem;
  85. sort(p+,p+n,cmp);
  86. p[n].x=p[].x;p[n].y=p[].y;
  87. tubao();
  88. double ans=0.0;
  89. for(int i=;i<=top-;i++)
  90. for(int j=i+;j<=top-;j++)
  91. for(int k=j+;k<=top;k++)
  92. {
  93. ans=max(fabs(chaji(que[i],que[j],que[k])),ans);
  94. }
  95. printf("%.2lf\n",ans/);
  96. }
  97. return ;
  98. }

HDU 2202 计算几何的更多相关文章

  1. hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. *HDU 2108 计算几何

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. hdu 2202 最大三角形 (凸包)

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. HDU 5784 (计算几何)

    Problem How Many Triangles (HDU 5784) 题目大意 给定平面上的n个点(n<2000),询问可以组成多少个锐角三角形. 解题分析 直接统计锐角三角形较困难,考虑 ...

  5. hdu 4720 计算几何简单题

    昨天用vim练了一道大水题,今天特地找了道稍难一点的题.不过也不是很难,简单的计算几何而已.练习用vim编码,用gdb调试,结果居然1A了,没调试...囧... 做法很简单,无非就是两种情况:①三个巫 ...

  6. HDU 2202 最大三角形(凸包)

    Problem Description 老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大.Eddy ...

  7. HDU 6205[计算几何,JAVA]

    题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=6206] 题意: 给出不共线的三个点,和一个点(x,y),然后判断(x,y)在不在这三个点组成的圆外. ...

  8. hdu 3320 计算几何(三维图形几何变换)

    openGL Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. *HDU 1007 计算几何

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

随机推荐

  1. java面试题总汇

    coreJava部分 7 1.面向对象的特征有哪些方面? 7 2.作用域public,private,protected,以及不写时的区别? 7 3.String 是最基本的数据类型吗? 7 4.fl ...

  2. freemarker 中文乱码

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker ...

  3. JDBC连接数据库

    JDBC连接数据库 1.加载JDBC驱动程序. Class.forName("com.mysql.jdbc.Driver"); 建立连接,. Connection conn = D ...

  4. Spring + Jedis集成Redis(集群redis数据库)

    前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...

  5. Riemann映射定理

    单复变函数几何理论最高的成就我想应该属于Riemann映射定理吧! Riemann映射定理:$\mathbb C$中任意边界多余一个点的单连通域$D$都与单位圆盘$B(0,1)$等价,即存在着$D$上 ...

  6. 忘记Windows7登陆密码解决办法

    忘记 Windows7 的登陆密码,解决这个问题的思路就是替换 system32 下的 Magnify.exe . 可以从 WindowsPE 启动,到 C:\windows\system32 下. ...

  7. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  8. C# Cookie

    1  推荐使用 is 或 as 操作符而不是强制 2  编码风格:Tab ——改成两个 C# 文档注释的快捷键  (将配置表压缩,从压缩文件中查找xml配置表 这个是指Unity项目上面)   尽量使 ...

  9. 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】

    一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...

  10. MySQL开发规范

    字段设计 (1)建议使用UNSIGNED存储非负数值. (2)建议使用INT UNSIGNED存储IPV4. (4)INT类型固定占用4字节存储,例如INT(4)仅代表显示字符宽度为4位,不代表存储长 ...