题目: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]最大土地面积——旋转卡壳的更多相关文章

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

    题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...

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

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2978  Solved: 1173[Submit][Sta ...

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

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

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

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2277  Solved: 853[Submit][Stat ...

  5. bzoj1069 [SCOI2007]最大土地面积 旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3767  Solved: 1501[Submit][Sta ...

  6. bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳

    题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...

  7. ●BZOJ 1069 [SCOI2007]最大土地面积

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...

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

    题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积.(n<=2000) 思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlo ...

  9. BZOJ 1069 [SCOI2007]最大土地面积 ——计算几何

    枚举对角线,然后旋转卡壳即可. #include <map> #include <cmath> #include <queue> #include <cstd ...

随机推荐

  1. 1-17-Linux中计划任务与日志的管理

    本节所讲内容: 1-1 Linux中的计划任务 1-1-1 at计划任务的使用 1-1-2 cron 计划任务的使用 1-1 Linux服务器的日志管理 1-1-1 日志的种类和记录的方式 1-1-2 ...

  2. poj 3411 Paid Roads很水的DFS

    题意:给你N 城市和M条道路,每条道路要付的钱,但是如果你在这个道路上你可以付其他道路的钱(跟走到的时候去的话不一样),问你从1走到N最少话费是多少. 直接DFS搜. 链接http://poj.org ...

  3. web前端 —— 移动端知识的一些总结

    个人在移动端的一些总结归纳,有新的知识点会一直更新 一.css部分 1.meta标签 <meta name="viewport" content="width=de ...

  4. [WinForm]Dundas Chart控件学习(附源码)

    1.Dundas公司简介 加拿大的一家公司,专业做图表展现的,很牛,据说现在被Microsoft收购了.官网地址:http://www.dundas.com/ 2.Chart基本要素 3.最简单的柱状 ...

  5. 一款连接SqlServer的数据库工具

    由于自己使用的电脑系统是xp,而服务器上的数据库是SqlServer2012,于是用SqlServer2005管理端操作2012,总是不成功.在网上也百度谷歌了很久,也没有解决,也发了很多问没有找到解 ...

  6. 利用Appium Python测试爱壁纸的登录和设置壁纸

    设置壁纸: #coding:utf-8 #Import the common package import os import unittest from appium import webdrive ...

  7. GPU编程自学4 —— CUDA核函数运行参数

    深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...

  8. 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization

    本节主要介绍的是libFM源码分析的第五部分之二--libFM的训练过程之Adaptive Regularization的方法. 5.3.Adaptive Regularization的训练方法 5. ...

  9. awk结合正则匹配

    利用awk分析data.csv中label列各取值的分布. 在终端执行head data.csv查看数据: name,business,label,label_name 沧州光松房屋拆迁有限公司,旧房 ...

  10. IOS开发 GCD介绍: 基本概念和Dispatch Queue

    iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ØN ...