题目大意:给定有n个点的点集,求该点集中任意四个点所构成的四边形中面积最大四边形的面积。

我们不难想到(不难yy出来),面积最大的四边形的四个顶点一定所给定的点集所构成的凸包上。我们求出给定点集的集合后,枚举一条对角线,由该对角线将凸包分为上下两部分,分别求出两个面积最大的三角形,面积加起来然后更新即可。对于每一次枚举,对角线的长度是固定的,由于凸包具有某些特殊性性质,我们可以通过三分求出面积最大的三角形的顶点,然后就OK了。

时间复杂度:$O(n^{2}*log(n))$。

刚开始因为我写得太挫,导致被卡了常数(1.1s),后来将原先两点距离公式+海伦公式求三角形面积法改为了铅锤法,从1100+ms降低至450ms才AC。

PS:此题其实可以用二分,三分有点多余(但是我不想改了啦啦啦)。

 #include<bits/stdc++.h>
#define M 100000
#define y0 y123
#define pi acos(-1)
using namespace std;
double x0,y0=1e20;
struct node{
double x,y; node(){x=y=;}
node(double xx,double yy){x=xx; y=yy;}
friend bool operator <(node a,node b){
double ap1=atan((a.y)/(a.x));
double ap2=atan((b.y)/(b.x));
if(ap1<) ap1=pi+ap1;
if(ap2<) ap2=pi+ap2;
return ap1<ap2;
}
friend node operator -(node a,node b){return node(a.x-b.x,a.y-b.y);}
friend double operator *(node a,node b){return a.x*b.y-a.y*b.x;}
}a[M],s[M];
double dis(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
double gets(int i,int j,int k){
node A=s[i],B=s[j],C=s[k];
double d,K,b;
if(A.x>B.x) swap(A,B);
if(A.x>C.x) swap(A,C);
if(B.x>C.x) swap(B,C);
K=(A.y-C.y)/(A.x-C.x); b=A.y-A.x*K;
d=K*B.x+b;
return abs(d-B.y)*(C.x-A.x);
} int main(){
int n,use=; scanf("%d",&n);
for(int i=;i<=n;i++){
double x,y; cin>>x>>y;
a[i]=node(x,y);
if(y<a[].y) swap(a[],a[i]);
}
for(int i=;i<=n;i++) a[i]=a[i]-a[];
a[]=node(,);
sort(a+,a+n+); a[n+]=a[];
s[++use]=a[]; s[++use]=a[];
for(int i=;i<=n+;i++){
while(use>&&(a[i]-s[use-])*(s[use]-s[use-])>) use--;
if(i<=n) s[++use]=a[i];
}
n=use; double maxn=;
for(int i=;i<=n;i++) s[i+n]=s[i];
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
double sup=,sdn=,now=;
int l=i,r=j;
while(r-l>){
int mid1=(l+l+r)/,mid2=(l+r+r)/;
if(gets(i,j,mid1)>gets(i,j,mid2)) r=mid2;
else l=mid1;
}
for(int k=l;k<=r;k++) sup=max(sup,gets(i,j,k));
l=j; r=n+i-;
while(r-l>){
int mid1=(l+l+r)/,mid2=(l+r+r)/;
if(gets(i,j,mid1)>gets(i,j,mid2)) r=mid2;
else l=mid1;
}
for(int k=l;k<=r;k++) sdn=max(sdn,gets(i,j,k));
maxn=max(maxn,sup+sdn);
}
printf("%.3lf\n",maxn/.);
}

【BZOJ1069】【SCOI2007】最大土地面积的更多相关文章

  1. bzoj1069 SCOI2007 最大土地面积

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

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

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

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

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

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

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

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

    求出凸包,显然四个点在凸包上.考虑枚举某点,再移动另一点作为对角线,容易发现剩下两点的最优位置是单调的.过程类似旋转卡壳. #include<iostream> #include<c ...

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

    题目链接 BZOJ1069 题解 首先四个点一定在凸包上 我们枚举对角线,剩下两个点分别是两侧最远的点 可以三分,复杂度\(O(n^2logn)\) 可以借鉴旋转卡壳的思想,那两个点随着对角线的一定单 ...

  7. [BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)

    题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...

  8. BZOJ1069 SCOI2007 最大土地面积 凸包、旋转卡壳

    传送门 在这里假设可以选择两个相同的点吧-- 那么选出来的四个点一定会在凸包上 建立凸包,然后枚举这个四边形的对角线.策略是先枚举对角线上的一个点,然后沿着凸包枚举另一个点.在枚举另一个点的过程中可以 ...

  9. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积

    在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...

  10. 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳

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

随机推荐

  1. 【Web】网站主如何更改网页标签的图标(favicon.ico)

    修改web项目的favicon图标,方式有两种:全局方式和局部方式 全局方式: 进入服务器\webapps\ROOT,然后用自己的favicon.ico替换服务器自带的favicon.ico图片 局部 ...

  2. 2018.09.26 bzoj1015: [JSOI2008]星球大战starwar(并查集)

    传送门 并查集经典题目. 传统题都是把删边变成倒着加边,这道题是需要倒着加点. 处理方法是将每个点与其他点的边用一个vector存起来,加点时用并查集统计答案就行了. 代码: #include< ...

  3. 2018.07.17 CQOI2017 余数求和(整除分块)

    洛谷传送门 bzoj传送门 这道题要用到学习莫比乌斯反演时掌握的整除分块算法,也就是对于一个数n" role="presentation" style="pos ...

  4. 45 The Effect of External Rewards on Behavior 外界奖励对行为的影响

    The Effect of External Rewards on Behavior 外界奖励对行为的影响 ①Psychologists take opposing views on how exte ...

  5. 设定Word段落的背景色

    段落背景不同于文字区别.很多新接触word的朋友都找不到怎么弄. 先把光标停留在需要设置的段落文字上,或者选择需要设置的段落文字. 点击段落里的边框和底纹,如图 在弹出框中选择底纹. 选择需要填充的颜 ...

  6. HDU 2037 今年暑假不AC (区间贪心)

    题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). ...

  7. HDU 2504 又见GCD (最大公因数+暴力)

    题意:是中文题. 析:a和c的最大公因数是b,也就是说,a和c除了b就没有公因数了.再说就是互质了. 所以先把a除以b,然后一个暴力n,满足gcd(a, n) =1,就结束,就是n倍的c. 代码如下: ...

  8. (二)swagger-springmvc

    如何入门 1. 我在 http://mvnrepository.com/ 上搜索 swagger-springmvc 2. 我找到一个具体版本 http://mvnrepository.com/art ...

  9. 字符串"k:1“” 处理成字典 {'k':1,'k1':2....}

    1.有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} #第一种方法 s1 = "k:1|k1:2|k2:3|k3:4&q ...

  10. php一些方法说明

    var_dump():判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型.此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值.数组将递归展开值,通过缩进显 ...