【bzoj1069】最大土地面积
Description
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成
的多边形面积最大。
Input
第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。
Output
最大的多边形面积,答案精确到小数点后3位。
Sample Input
0 0
1 0
1 1
0 1
0.5 0.5
Sample Output
HINT
数据范围 n<=2000, |x|,|y|<=100000
Solution
显然四个点都在凸包上啊!
显然的,我们枚举对角线,我们现在的问题是找离对角线最远的点是哪两个点

于是我们发现,当A固定,C变为逆时针的下一个点的时候,
B,D也一定是单调逆时针变动的
这里运用旋转卡壳的思想
所以这题本质是旋转卡壳,只是更加简单了
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef double db;
const int N=;
const db eps=1e-;
struct P{db x,y;} a[N],s[N];
int n,top;db ans=;
il P operator-(P a,P b){
return (P){a.x-b.x,a.y-b.y};
}
il db operator*(P a,P b){
return a.x*b.y-a.y*b.x;
}
il db S(P a,P b,P c){
return fabs((a-b)*(a-c))/;
}
il db dis(P a){
return a.x*a.x+a.y*a.y;
}
il db cmp(P x,P y){
return (x-a[])*(y-a[])>;
}
il void print(P a){
printf("(%lf,%lf)\n",a.x,a.y);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
for(int i=;i<=n;i++)
if(a[i].y<a[].y||(a[i].y==a[].y&&a[i].x<a[].x)) swap(a[],a[i]);
sort(a+,a+n+,cmp);
s[]=a[];s[]=a[];top=;
for(int i=;i<=n;i++){
while(top>&&(a[i]-s[top-])*(s[top]-s[top-])>=) top--;
s[++top]=a[i];
}
if(top==){
ans=S(s[],s[],s[])+S(s[],s[],s[]);
printf("%.3lf",ans);
return ;
}
// for(int i=1;i<=top;i++) print(s[i]);
for(int i=;i<top;i++) s[i]=s[i+];
n=top;
for(int i=;i<n;i++){
for(int j=(i+)%n,k=(i+)%n,l=(i+)%n;k!=(i-+n)%n;k=(k+)%n){
while(S(s[i],s[j],s[k])<S(s[i],s[(j+)%n],s[k])) j=(j+)%n;
while(S(s[i],s[l],s[k])<S(s[i],s[(l+)%n],s[k])) l=(l+)%n;
// cout<<i<<" "<<j<<" "<<k<<" "<<l<<endl;
ans=max(S(s[i],s[j],s[k])+S(s[i],s[k],s[l]),ans);
}
}
printf("%.3lf",ans);
return ;
}
【bzoj1069】最大土地面积的更多相关文章
- 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2707 Solved: 1053[Submit][Sta ...
- bzoj1069 SCOI2007 最大土地面积
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2560 Solved: 983 Description ...
- bzoj1069 [SCOI2007]最大土地面积 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3767 Solved: 1501[Submit][Sta ...
- BZOJ1069 SCOI2007最大土地面积(凸包+旋转卡壳)
求出凸包,显然四个点在凸包上.考虑枚举某点,再移动另一点作为对角线,容易发现剩下两点的最优位置是单调的.过程类似旋转卡壳. #include<iostream> #include<c ...
- BZOJ1069 [SCOI2007]最大土地面积 【凸包 + 旋转卡壳】
题目链接 BZOJ1069 题解 首先四个点一定在凸包上 我们枚举对角线,剩下两个点分别是两侧最远的点 可以三分,复杂度\(O(n^2logn)\) 可以借鉴旋转卡壳的思想,那两个点随着对角线的一定单 ...
- [BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)
题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...
- [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3669 Solved: 1451[Submit][Sta ...
- [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3629 Solved: 1432[Submit][Sta ...
- BZOJ1069 SCOI2007 最大土地面积 凸包、旋转卡壳
传送门 在这里假设可以选择两个相同的点吧-- 那么选出来的四个点一定会在凸包上 建立凸包,然后枚举这个四边形的对角线.策略是先枚举对角线上的一个点,然后沿着凸包枚举另一个点.在枚举另一个点的过程中可以 ...
随机推荐
- 2017-2018-2 《网络对抗技术》 20155310 第二周 Exp1 PC平台逆向破解(5)M
2017-2018-2 <网络对抗技术> 20155310 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 汇编 fsub ,fmul,fdiv,fild,CVTTPS2PI 指令
知识点: 浮点指令 fsub 一.浮点指令fsub 格式 fsub memvar // st0=st0-memvar 知识点: 浮点指令 fmul 一.浮点指令fmul 格式 fmul mem ...
- kali2.0 使用SSH进行远程登录
工具/原料 kali 2.0 ssh SSH连接工具(XShell) 一.配置SSH参数 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#Passwo ...
- PowerShell 操作 Azure SQL Active Geo-Replication
前文中我们比较全面的介绍了 Azure SQL Database Active Geo-Replication 的主要特点和优势.接下来我们将从自动化的角度介绍如何通过 PowerShell 在项目中 ...
- Windows10没有修改hosts文件权限的解决方案(亲测有效)
当遇到有hosts文件不会编辑或者,修改了没办法保存”,以及需要权限等问题如图: 或者这样: 我学了一招,现在教给你: 1.win+R 2.进入hosts的文件所在目录: 3.我们开始如何操作才能不出 ...
- 回溯-uva129
题目链接:https://vjudge.net/problem/UVA-129 题解: 这道题卡了一会儿的时间,一开始最大的问题是如何判断添加了一个字符之后,该字符串是不是一个困难的串,解决办法是:利 ...
- linux一切皆文件之tty字符设备(深入理解sshd创建pty的过程) (五)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备支 ...
- linux一切皆文件之块设备文件(四)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备是 ...
- npm模块之http-proxy-middleware使用教程(译)
单线程node.js代理中间件,用于连接,快速和浏览器同步 Node.js代理简单. 轻松配置代理中间件连接,快速,浏览器同步等. 由流行的Nodejitsu http代理提供. TL;DR 代理/ ...
- java锁经典示例——卖车票场景
场景:20张车票 3个窗口同时售票 1.不加锁 package com.yao.lock; /** * 不加锁的情况 */ public class Runnable_demo implements ...