bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069
发现 n 可以 n^2 。所以枚举对角线,分开的两部分三角形就可以旋转卡壳了。
注意坐标是实数。忘了改生成函数调了 2h+ ……
也不知道用不用管凸包上只有 3 个点的情况。反正这样的话就是枚举一个凹进去的三角形的最小面积罢了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
const int N=; const db INF=4e10+;
int n,tot,sta[N],top;db ans;
struct Node{
db x,y;
Node(db a=,db b=):x(a),y(b) {}///////db!!!!!!
bool operator< (const Node &b)const
{return x<b.x||(x==b.x&&y<b.y);}
Node operator- (const Node &b)const
{return Node(x-b.x,y-b.y);}
}t[N],a[N];
db Mx(db a,db b){return a>b?a:b;}
db Mn(db a,db b){return a<b?a:b;}
db cross(Node u,Node v){return u.x*v.y-u.y*v.x;}
void get_hl()
{
sort(t+,t+tot+);
for(int i=;i<=tot;i++)
{
while(top>&&cross(t[sta[top]]-t[i],t[sta[top-]]-t[i])>=)
top--;
sta[++top]=i;
}
for(int i=tot-,lm=top;i;i--)
{
while(top>lm&&cross(t[sta[top]]-t[i],t[sta[top-]]-t[i])>=)
top--;
sta[++top]=i;
}
n=top-;
for(int i=;i<=n;i++)a[i]=t[sta[i]];
}
void upd(int &x){if(x>n)x-=n;if(x<=)x+=n;}
void rtc(int st)
{
int p0=st+,p1=st+;upd(p1);
a[n+]=a[];//
for(int cr=st+;cr<=n;cr++)//<=n is ok not !=(st-1)
{
Node d=a[cr]-a[st];
while(cross(a[p0+]-a[st],d)>cross(a[p0]-a[st],d))p0++,upd(p0);
while(cross(d,a[p1+]-a[st])>cross(d,a[p1]-a[st]))p1++,upd(p1);
ans=Mx(ans,cross(a[p0]-a[st],d)+cross(d,a[p1]-a[st]));
}
}
int main()
{
scanf("%d",&tot);
for(int i=;i<=tot;i++)scanf("%lf%lf",&t[i].x,&t[i].y);
get_hl();
if(n>=)
{
for(int i=,j=n-;i<=j;i++)rtc(i);//<=n-2 is ok
printf("%.3f\n",ans/);
}
else
{
ans=INF;bool flag=;
for(int i=;i<=n;i++)
{
flag=;
for(int j=;j<=;j++)
if(t[i].x==a[j].x&&t[i].y==a[j].y)
{flag=;break;}
if(flag)continue;
ans=Mn(ans,cross(t[i]-a[],t[i]-a[]));
ans=Mn(ans,cross(t[i]-a[],t[i]-a[]));
ans=Mn(ans,cross(t[i]-a[],t[i]-a[]));
}
printf("%.3f\n",(cross(a[]-a[],a[]-a[])-ans)/);
}
return ;
}
bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳的更多相关文章
- BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)
题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...
- BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2978 Solved: 1173[Submit][Sta ...
- 1069: [SCOI2007]最大土地面积|旋转卡壳
旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...
- bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2277 Solved: 853[Submit][Stat ...
- bzoj1069 [SCOI2007]最大土地面积 旋转卡壳
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3767 Solved: 1501[Submit][Sta ...
- bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳
题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...
- ●BZOJ 1069 [SCOI2007]最大土地面积
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...
- [BZOJ]1069: [SCOI2007]最大土地面积
题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积.(n<=2000) 思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlo ...
- BZOJ 1069 [SCOI2007]最大土地面积 ——计算几何
枚举对角线,然后旋转卡壳即可. #include <map> #include <cmath> #include <queue> #include <cstd ...
随机推荐
- Markdown_02_作图
[TOC] 前言 一.序列图(Sequence) 序列图由 js-sequence提供支持,可以将代码块转成序列图 示例如下: ```sequence Title: Here is a title A ...
- 建造者模式(Builder和Director)
一.建造者模式介绍 建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 假如一个对象的构建很复杂,需要很多步骤.则可以使用建造者模式 ...
- c# JScriptProvider包装
using System; using System.CodeDom.Compiler; using System.Reflection; using System.Web.UI; using Mic ...
- C#项目中怎样创建和使用类和类库
创建一个类库项目在“文件”菜单上,选择“新建项目”. 在“新建项目”对话框的“模板”窗格中,单击“类库”. 在“名称”框中键入 Persons,再单击“确定”. 把“添加新解决方案”勾选掉,选择“添入 ...
- React-Native进阶_6.导航 Naviagtion传递数据并展示
接着上面 Navigation 继续学习传递数据给下一个页面 onPress={() => this.props.navigation.navigate('Detail',{info:movie ...
- Cannot mix incompatible Qt library (version 0x40805) with this library (version 0x40801)
问题描述 今天运行我的 linux 上的 go 语言 IDE liteide 突然报错,错误如下: Cannot mix incompatible Qt library (version 0x4080 ...
- iOS的坑:ERRORITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone appsand app updatesXcode7提交到App Store二进制文件时报错错误:“你itms-90096二进制不是iPhone 5的新iPhone应用程序和应用程序的更新必须提交支持iPhone 5英寸的显示器........
在工程里的Images.xcassets添加并设置LaunchImage对解决ERROR ITMS-90096根本不会起到任何作用,需要单独添加针对iPhone 5的载入图片.关键点有三项: 1.图片 ...
- 会议室预定demo mrbs
关于会议室的增删改查 查: HTML: login继承django自带的admin用户认证系统 <!DOCTYPE html> <html lang="en"&g ...
- erlang游戏开发tcp
之前在开发游戏的时候我们采用smartfoxserver这个java开发的游戏引擎,这个引擎在开发回合制游戏方面速度还是不错的.但是面对客户日益增长的需求还是有些力不从心.比如集群,比如灾备,热切换, ...
- java中的Reference
这两天又重新学习了一下Reference,根据网上的资源做了汇总. Java中的引用主要有4种: 强引用 StrongReference: Object obj = new Object(); obj ...