呃,不知道我用的算不算卡壳,总有点枚举的意思。

先求凸包,然后,枚举其中一点,再枚举另一点作为结尾,这个向量旋转一周后,求出最大值面积。这里面用的是旋转卡壳判断的那个式子。

PS:下一篇和这题是一样题意,但用这题的写法去过下一题,是过不了的。但这个写法在POJ 上是400MS,而下一题的写法在POJ上是1000MS。。汗了。。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. struct point{
  9. int x,y;
  10. }p[50050];
  11. int n;
  12.  
  13. int ans[50050],st[50050],cnt,stop;
  14.  
  15. bool cmp(point A, point B){
  16. if(A.y<B.y) return true;
  17. else if(A.y==B.y){
  18. if(A.x<B.x) return true;
  19. }
  20. return false;
  21. }
  22.  
  23. int multi(point a,point b,point c){
  24. point p1; p1.x=a.x-c.x; p1.y=a.y-c.y;
  25. point p2; p2.x=b.x-c.x; p2.y=b.y-c.y;
  26. return p1.x*p2.y-p1.y*p2.x;
  27. }
  28.  
  29. void slove(){
  30. cnt=stop=0;
  31. st[stop++]=0; st[stop++]=1;
  32. for(int i=2;i<n;i++){
  33. while(stop>1&&multi(p[i],p[st[stop-1]],p[st[stop-2]])>0) stop--;
  34. st[stop++]=i;
  35. }
  36. for(int i=0;i<stop;i++)
  37. ans[cnt++]=st[i];
  38. stop=0; st[stop++]=n-1; st[stop++]=n-2;
  39. for(int i=n-3;i>=0;i--){
  40. while(stop>1&&multi(p[i],p[st[stop-1]],p[st[stop-2]])>0) stop--;
  41. st[stop++]=i;
  42. }
  43. for(int i=1;i<stop;i++)
  44. ans[cnt++]=st[i];
  45. }
  46.  
  47. double Triangle(point a,point b,point c){
  48. point p1; p1.x=a.x-c.x; p1.y=a.y-c.y;
  49. point p2; p2.x=b.x-c.x; p2.y=b.y-c.y;
  50. return fabs((p1.x*p2.y-p1.y*p2.x)*1.0)/2.0;
  51. }
  52.  
  53. double Area(){
  54. int q;
  55. double anst=0;
  56. for(int i=0;i<cnt;i++){
  57. q=i+1;
  58. for(int j=i+1;j<cnt;j++){
  59. while(Triangle(p[ans[i]],p[ans[j]],p[ans[q]])<Triangle(p[ans[i]],p[ans[j]],p[ans[(q+1)%cnt]]))
  60. q=(q+1)%cnt;
  61. anst=max(anst,Triangle(p[ans[i]],p[ans[j]],p[ans[q]]));
  62. }
  63. }
  64. return anst;
  65. }
  66.  
  67. int main(){
  68. while(scanf("%d",&n)!=EOF){
  69. if(n==-1) break;
  70. for(int i=0;i<n;i++){
  71. scanf("%d%d",&p[i].x,&p[i].y);
  72. }
  73. sort(p,p+n,cmp);
  74. slove();
  75. double anst=0;
  76. anst=max(anst,Area());
  77. printf("%.2lf\n",anst);
  78. }
  79. return 0;
  80. }

  

POJ 2079的更多相关文章

  1. hdu 3934&&poj 2079 (凸包+旋转卡壳+求最大三角形面积)

    链接:http://poj.org/problem?id=2079 Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissio ...

  2. ●POJ 2079 Triangle

    题链: http://poj.org/problem?id=2079 题解: 计算几何,凸包,旋转卡壳 复杂度O(N^2),(O(N)什么的就不说了,我觉得我看过的O(N)方法正确性都有问题,虽然有些 ...

  3. POJ 2079 Triangle (凸包+旋转卡壳)

    [题目链接] http://poj.org/problem?id=2079 [题目大意] 给出一些点,求出能组成的最大面积的三角形 [题解] 最大三角形一定位于凸包上,因此我们先求凸包,再在凸包上计算 ...

  4. poj 2079 Triangle(旋转卡壳)

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 8917   Accepted: 2650 Descript ...

  5. POJ 2079 Triangle [旋转卡壳]

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 9525   Accepted: 2845 Descript ...

  6. poj 2079(旋转卡壳求解凸包内最大三角形面积)

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 9060   Accepted: 2698 Descript ...

  7. POJ 2079 Triangle(凸包+旋转卡壳,求最大三角形面积)

    Triangle Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 7625   Accepted: 2234 Descript ...

  8. POJ - 2079:Triangle (旋转卡壳,求最大三角形)

    Given n distinct points on a plane, your task is to find the triangle that have the maximum area, wh ...

  9. POJ 2079 最大三角形面积(凸包)

    Triangle Description Given n distinct points on a plane, your task is to find the triangle that have ...

随机推荐

  1. UIDynamicBehavior的简单使用:接球小游戏

    一.概念扩充: 1.在开发中,我们可以使用UIKit中提供的仿真行为,实现与现实生活中类似的物理仿真动画,UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit,比如重力,铰链连接,碰撞 ...

  2. Django day15 (一) cbv装饰器 , 中间件

    一: 装饰器 二: 中间件

  3. React.js初探

    React.js 菜鸟官方解释: React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源 ...

  4. JavaScript 关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAscript:JavaScript的标准语法.包括变量,表达式,运算符,函数,if语句,for语句等. DOM:文档对象 ...

  5. SQlserver 当输入参数为可选条件

    以前很懒,都是用拼接字符串的方式,加上if 语句,根据输入参数是否为空来判断是否需要在where 后加上对应字段的条件限制 但是拼接字符串很烦,又总是被转义符搞得很烦  '''' 所以想了其他办法 分 ...

  6. 软件架构自学笔记——常见的软件架构(https://jiajunhuang.com/articles/2018_09_16-common_software_archtecture_pattern.md.html)

    分层模式 这种模式主要是将设计分层,每一层为其上层提供服务.例如:web开发中我们常常将某些常用的RESTful接口抽象出一个service层. 客户端-服务端模式 客户端和服务端分离,从而解耦.通过 ...

  7. android开源新闻小程序、3D翻转公告效果、小说检索、Kotlin开发TODO清单等源码

    Android精选源码 开源新闻小程序源码分享 android动态壁纸.锁屏动画.来电秀等源码 android笔记App效果源码 Android实现3D版翻页公告效果 android小说搜索阅读源码 ...

  8. 01--Java IO基础

    一.java.io包概览 Java IO包主要可以分为如下4类: 基于字节操作的I/O接口:InputStream和OutputStream. 基于字符操作的I/O接口:Writer和Reader 基 ...

  9. js 图片轮播代码编辑

    图片轮播,将几张图片统一放在展示平台 banner上,通过banner移动将图片轮流播放. <script>// 取对象 var btn_l = document.getElementsB ...

  10. dubbo之只订阅及只注册

    只订阅 问题 如果有两个镜像环境,两个注册中心,有一个服务只在其中一个注册中心有部署,另一个注册中心还没来得及部署,而两个注册中心的其它应用都需要依赖此服务,所以需要将服务同时注册到两个注册中心,但却 ...