[SCOI2007]最大土地面积
凸包,
#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]最大土地面积相关推荐
- bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1373 [Submit][S ...
- P4166 [SCOI2007]最大土地面积
传送门 首先,四边形的四个点肯定都在凸包上(别问我为什么我也不知道,感性理解一下好了) 那么我们可以求出凸包之后\(O(n^4)\)暴力枚举,据说在随机数据下凸包上的点只有\(O(logn)\)个可过 ...
- bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...
- 1069: [SCOI2007]最大土地面积|旋转卡壳
旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...
- 1069: [SCOI2007]最大土地面积 - BZOJ
Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. Input 第1行一个正整数N,接下来N行,每行2个数x,y ...
- bzoj1069 [SCOI2007]最大土地面积 凸包+单调性
先做凸包 枚举对角线,然后两个指针单调的扫.. 枚举的顺序有时候也会创造性质 注意重点不能选! 码: #include<iostream> #include<cstdio> # ...
- bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...
- 重走长征路---OI每周刷题记录---9月6日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
最新文章
- 机器学习算法与理论用到的数学知识
- linux启动spark命令,在linux上安装spark
- js php调用webservice,php调用web services两种方法soap和curl
- mysql 线性表_数据结构之线性表
- excel文件存入mysql_解析excel文件并将数据导入到数据库中
- (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节7:缓冲区管理
- javascript replace高级用法
- linux 下which、whereis、locate、find文件查找命令的区别[ZT]
- 23. 线程如何退出结束
- 辨异 —— Java 中的抽象类和接口
- 大一大学计算机应用基础课后简答题,2017大一计算机应用基础试题及答案
- Ubuntu20系统添加右键菜单:新建文档
- Hello World, Hello Me | 图灵人工智能书单
- OSChina 周日乱弹 ——给苹果电脑选机械键盘
- Shell脚本遍历指定网段的在线ip
- Ubuntu 的 openssl 安全问题提醒 USN-2192-1
- 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】
- C#使用西门子S7 协议读写PLC DB块
- SQL char,nchar,varchar,nvarchar区别与使用
- 实时系统中的MCS模式和Sporadic Server算法
热门文章
- kvm虚拟机端口映射(端口转发)到宿主机
- Linux Namespace系列(01):Namespace概述
- linux 产生0~2之间的随机数
- linux下的环境变量/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
- Python Django模板页面过滤器使用示例
- 2020阿里面试题整理(含答案)
- java枚举类使用 == 还是equals来进行比较
- 10双屏鼠标过不去_升级到2.0版本的双屏工作桌!家中工作高效还需利器辅助
- 如何将Felgo程序部署到Android中
- 动态折线图-Android篇