题目: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. 修改Pycharm for Mac背景色

    Mac 上面的Pycharm的背景是白色,太刺眼,网上教程那么多,实用性都不高,最终在csdn找到了一个. 修改步骤如下: pycharm -->Preferences --> Appea ...

  2. 收集的几个好用的maven mirror

    <mirrors> <mirror> <id>jboss-public-repository-group</id> <mirrorOf>ce ...

  3. ZOJ 2599 Graduated Lexicographical Ordering ★(数位DP)

    题意 定义两个数的比较方法,各位数字之和大的数大,如果数字和相等则按字典序比较两个数的大小.输入n,k,求:1.数字k的排名:2.排名为k的数. 思路 算是一类经典的统计问题的拓展吧~ 先来看第一问. ...

  4. HDU 4669 Mutiples on a circle 不知道该归为哪一类。

    题意:给你N个珠宝和一个K,每个珠宝上面都有数字,这个珠宝做成项链,把珠宝上的数字拼起来如果可以整除掉K,那么久说这个数字为wonderful value,问你有多少种方案可以组成WONDERFUL ...

  5. 用Qt写了一个qq客户端,采用webqq协议,发出来和大家分享一下---大神请无视

    首先做以下声明: 本程序基于腾讯公司的webqq协议开发,所有相关版权归腾讯公司所有.此程序只用于技术交流和学习,不得用于其他方面. ---开发者:雨后星辰,转载请注明出处:http://www.cn ...

  6. ansible入门六(roles)

    一.什么场景下会用roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器.我们如何来定义playbook? 第一个play用到 ...

  7. Oracle 常用系统包

    一.DBMS_OUTPUT(用于输入和输出信息) 二.DBMS_JOB(用于安排和管理作业队列) 三.dbms_pipe(类似UNIX系统的管道) 四.dbms_alert(用于生成并传递数据库预警信 ...

  8. LabVIEW中使用GPU进行高性能计算

    项目中需要使用LabVIEW控制NI FPGA board产生控制信号等,使用GPU对采集的数据进行高性能计算,因此方案之一是用Visual Studio设计基于CUDA的GPU并行计算算法代码,然后 ...

  9. Linux服务器静态路由配置

    转载自:点击打开链接 静态路由是在路由器中设置的固定的路由表.除非网络管理员干预,否则静态路由不会发生变化.由于静态路由不能对网络的改变作出反映,一般用于网络规模不大.拓扑结构固定的网络中.静态路由的 ...

  10. 使用JQuery Deferred对象的then() 解决多个AJAX操作顺序依赖的问题

    原文地址:http://www.2cto.com/kf/201507/424202.html 之前的文章javascript异步代码的回调地狱中提到了编写AJAX代码经常遇到的3个问题,现在我们看下如 ...