首先,最大四边形的四个点一定在凸包上

所以先求凸包

有个结论,若是随机数据,凸包包括的点大约是\(\log_2n\)个

然鹅,此题绝对不会这么轻松,若\(O(n^4)\)枚举,只有50分

所以还是要想正解

旋转卡壳是继承上一个点枚举,所以枚举对角线上的两点,通过旋转卡壳找剩余两点

复杂度\(O(n^2)\)

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<bitset>
#include<sstream>
#include<cstdlib>
#define QAQ int
#define TAT long long
#define OwO bool
#define ORZ double
#define F(i,j,n) for(QAQ i=j;i<=n;++i)
#define E(i,j,n) for(QAQ i=j;i>=n;--i)
#define MES(i,j) memset(i,j,sizeof(i))
#define MEC(i,j) memcpy(i,j,sizeof(j)) using namespace std;
const QAQ N=200005;
const ORZ eps=1e-8; QAQ n;
struct Point{
ORZ x,y;
friend Point operator + (Point a,Point b){
Point t;
t.x=a.x+b.x;t.y=a.y+b.y;
return t;
}
friend Point operator - (Point a,Point b){
Point t;
t.x=a.x-b.x;t.y=a.y-b.y;
return t;
}
friend ORZ operator ^ (Point a,Point b){
return a.x*b.y-a.y*b.x;
}
friend ORZ operator * (Point a,Point b){
return a.x*b.x+a.y*b.y;
}
}a[N],s[N];
QAQ top;
ORZ ans; QAQ sign(ORZ x){
return fabs(x)<=eps ? 0 : (x>0 ? 1 : -1);
} ORZ dis(Point i,Point j){
return (i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y);
} OwO comp(Point i,Point j){
ORZ x=(i-a[1])^(j-a[1]);
return x>0||x==0&&dis(a[1],i)<dis(a[1],j);
} void Graham(){
QAQ k=1;
F(i,2,n) if(a[i].y<a[k].y||(a[i].y==a[k].y&&a[i].x<a[k].x)) k=i;
swap(a[k],a[1]);
sort(a+2,a+n+1,comp);
s[++top]=a[1];s[++top]=a[2];
F(i,3,n){
while(top>=2&&sign((s[top]-s[top-1]) ^ (a[i]-s[top-1]))<=0) top--; //"<=0" 别忘"="
s[++top]=a[i];
}
} ORZ cal(Point i,Point j,Point k,Point l){
return (((k-i)^(j-i))+((l-i)^(k-i)))/2.0;
} ORZ work(){
ORZ ans=0;
s[top+1]=a[1];
F(i,1,top){
QAQ a=i%top+1,b=(i+2)%top+1;
F(j,i+2,top){
while(a%top+1!=j&&(((s[a]-s[i])^(s[j]-s[i])))<(((s[a+1]-s[i])^(s[j]-s[i])))) (a%=top)+=1;
while(b%top+1!=j&&(((s[j]-s[i])^(s[b]-s[i])))<(((s[j]-s[i])^(s[b+1]-s[i])))) (b%=top)+=1;
//注意叉积的前后向量顺序
ans=max(ans,fabs(((s[a]-s[i])^(s[j]-s[i]))+((s[j]-s[i])^(s[b]-s[i]))));
}
}
return ans;
} QAQ main(){
scanf("%d",&n);
F(i,1,n) scanf("%lf%lf",&a[i].x,&a[i].y);
Graham();
printf("%.3lf\n",work());
return 0;
}

[SCOI2007]最大土地面积的更多相关文章

  1. bzoj1069 SCOI2007 最大土地面积

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2560  Solved: 983 Description ...

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

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

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

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

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

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

  5. [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳

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

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

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

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

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

  8. [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)

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

  9. luogu P4166 [SCOI2007]最大土地面积 凸包 旋转卡壳

    LINK:最大土地面积 容易想到四边形的边在凸包上面 考虑暴力枚举凸包上的四个点计算面积. 不过可以想到可以直接枚举对角线的两个点找到再在两边各找一个点 这样复杂度为\(n^3\) 可以得到50分. ...

  10. 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...

随机推荐

  1. 织梦5.7DEDECMS标签大全

    1.关键描述调用标签: 2.路径调用标签: {dede:field name='templeturl'/} {dede:global.cfg_templets_skin/} 3.网站标题调用标签: d ...

  2. 基于VUE选择上传图片并在页面显示(图片可删除)

    demo例子: 依赖文件 : http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML文本内容: <template> ...

  3. Thrift之TProtocol系列TCompactProtocol解析

    TCompactProtocol协议作为TBinaryProtocol协议的升级强化版,都作为二进制编码传输方式,采用了一种乐器MIDI文件的编码方法(wiki,百度下),简单介绍下两种思想: 1: ...

  4. hive(II)--sql考查的高频问题

    在了解别人hive能力水平的时候,不管是别人问我还是我了解别人,有一些都是必然会问的东西.问的问题也大都大同小异.这里总结一下我遇到的那些hive方面面试可能涉及的问题 1.行转列(列转行) 当我们建 ...

  5. spring task 定时

    最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 首先,当然是添加依 ...

  6. linux_文件权限

    权限贯穿linux整个系统 创建文件或目录,属主和组都是当前用户 linux权限位? 9位基础权限位, 3位一组,总共12位权限 用户对文件权限,相当于你的笔记本 r      读    4 w    ...

  7. python_计算1+……+100中偶数和

    如何计算1+--+100中偶数和? 1. 把奇数去掉,通过if,判断累加数除以2的余数,是否为1,判断是否是奇数 2. 通过continue 跳过对奇数的累加 #!/usr/bin/python3 d ...

  8. Linux指令--chgrp

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...

  9. git 安装使用

    系统ubuntu14.04 1.安装:sudo  apt-get install git 2.设置name and Email: git config --global user.name " ...

  10. Linux安装JDK步骤

    Linux安装JDK步骤 1.先从官网下载JDK安装包,我下载的是:jdk-8u131-linux-x64.tar.gz版本 2.在usr下创建java文件夹 # mkdir /usr/java 3. ...