凸包,

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
typedef long double ld;
const int maxn = 100100;
int n;
struct T{ld x,y;inline T(ld a=0,ld b=0){x=a,y=b;}inline T& operator += (const T&b){x+=b.x,y+=b.y;return *this;}inline T& operator += (const ld&b){x+=b,y+=b;return *this;}inline T& operator -= (const T&b){x-=b.x,y-=b.y;return *this;}inline T& operator -= (const ld&b){x-=b,y-=b;return *this;}inline T& operator *= (const ld&b){x*=b,y*=b;return *this;}inline T& operator /= (const ld&b){x/=b,y/=b;return *this;}inline T operator + (const T&b)const{return T(x+b.x,y+b.y);}inline T operator - (const T&b)const{return T(x-b.x,y-b.y);}inline T operator / (const ld&b)const{return T(x/b,y/b);}inline T operator * (const ld&b)const{return T(x*b,y*b);}
}a[maxn];
inline ld cross(T a,T b){return a.x*b.y-a.y*b.x;}
inline ld cross(T a,T b,T c){return cross(b-a,c-a);}
const auto cmp = [](T a,T b){ld res=cross(a,b);return res!=0?res<0:a.x<b.x;
};
T st[maxn];
int top;
inline void up(ld&a,ld b){if(a<b)a=b;}
int main(){std::ios::sync_with_stdio(false),std::cin.tie(0);std::cin >> n;int mn=1;for(int i=1;i<=n;++i){std::cin >> a[i].x >> a[i].y;if(a[i].y<a[mn].y||a[i].y==a[mn].y&&a[i].x<a[mn].x)mn=i;}std::swap(a[mn],a[1]);T p = a[mn];for(int i=1;i<=n;++i)a[i]-=p;std::sort(a+2,a+n+1,cmp);for(int i=1;i<=n;++i){st[++top]=a[i];while(top>2&&cross(st[top-2],st[top-1],st[top])>=0)st[--top]=a[i];}ld ans=fabs(cross(st[1],st[2],st[3]))/2;for(int a=1;a<=top;++a){for(int c=a+2,b=a+1,d=c%top+1;d!=a&&c<=top;++c){while(cross(st[a],st[c],st[b%top+1])>cross(st[a],st[c],st[b]) && b%top+1 != c)b=b%top+1;while(cross(st[a],st[c],st[d%top+1])<cross(st[a],st[c],st[d]) && d%top+1 != a)d=d%top+1;up(ans,fabsl(cross(st[a],st[c],st[b])+fabsl(cross(st[a],st[c],st[d]))));}}printf("%.3Lf",ans/2);
}

转载于:https://www.cnblogs.com/skip1978/p/10353761.html

[SCOI2007]最大土地面积相关推荐

  1. bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 3438  Solved: 1373 [Submit][S ...

  2. P4166 [SCOI2007]最大土地面积

    传送门 首先,四边形的四个点肯定都在凸包上(别问我为什么我也不知道,感性理解一下好了) 那么我们可以求出凸包之后\(O(n^4)\)暴力枚举,据说在随机数据下凸包上的点只有\(O(logn)\)个可过 ...

  3. bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...

  4. 1069: [SCOI2007]最大土地面积|旋转卡壳

    旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...

  5. 1069: [SCOI2007]最大土地面积 - BZOJ

    Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. Input 第1行一个正整数N,接下来N行,每行2个数x,y ...

  6. bzoj1069 [SCOI2007]最大土地面积 凸包+单调性

    先做凸包 枚举对角线,然后两个指针单调的扫.. 枚举的顺序有时候也会创造性质 注意重点不能选! 码: #include<iostream> #include<cstdio> # ...

  7. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积

    在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...

  8. 重走长征路---OI每周刷题记录---9月6日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  9. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

最新文章

  1. 机器学习算法与理论用到的数学知识
  2. linux启动spark命令,在linux上安装spark
  3. js php调用webservice,php调用web services两种方法soap和curl
  4. mysql 线性表_数据结构之线性表
  5. excel文件存入mysql_解析excel文件并将数据导入到数据库中
  6. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节7:缓冲区管理
  7. javascript replace高级用法
  8. linux 下which、whereis、locate、find文件查找命令的区别[ZT]
  9. 23. 线程如何退出结束
  10. 辨异 —— Java 中的抽象类和接口
  11. 大一大学计算机应用基础课后简答题,2017大一计算机应用基础试题及答案
  12. Ubuntu20系统添加右键菜单:新建文档
  13. Hello World, Hello Me | 图灵人工智能书单
  14. OSChina 周日乱弹 ——给苹果电脑选机械键盘
  15. Shell脚本遍历指定网段的在线ip
  16. Ubuntu 的 openssl 安全问题提醒 USN-2192-1
  17. 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】
  18. C#使用西门子S7 协议读写PLC DB块
  19. SQL char,nchar,varchar,nvarchar区别与使用
  20. 实时系统中的MCS模式和Sporadic Server算法

热门文章

  1. kvm虚拟机端口映射(端口转发)到宿主机
  2. Linux Namespace系列(01):Namespace概述
  3. linux 产生0~2之间的随机数
  4. linux下的环境变量/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
  5. Python Django模板页面过滤器使用示例
  6. 2020阿里面试题整理(含答案)
  7. java枚举类使用 == 还是equals来进行比较
  8. 10双屏鼠标过不去_升级到2.0版本的双屏工作桌!家中工作高效还需利器辅助
  9. 如何将Felgo程序部署到Android中
  10. 动态折线图-Android篇