BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)
题目链接~
1069: [SCOI2007]最大土地面积
思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定!
不过计算几何的题目就是这样,程序中间的处理还是比较麻烦的,写的时候要很小心,特别是存点和枚举的时候要注意是个循环。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm> #define For(i,a,b) for(register int i=a;i<=b;++i)
#define Dwn(i,a,b) for(register int i=a;i>=b;--i)
#define Re register using namespace std; const int N=; struct P{
double x,y;
}st[N],O,p[N];
int n,top=-; P operator -(P a,P b){
P t; t.x=a.x-b.x; t.y=a.y-b.y; return t;
}
double operator *(P a,P b){
return a.x*b.y-b.x*a.y;
}
double Dis(P a,P b){
return sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );
}
int Xx(P a){
if(a.x-O.x> &&a.y-O.y>=)return ;
if(a.x-O.x<=&&a.y-O.y> )return ;
if(a.x-O.x< &&a.y-O.y<=)return ;
if(a.x-O.x>=&&a.y-O.y< )return ;
}
bool cmp(const P a,const P b){
int aX=Xx(a);
int bX=Xx(b);
if(aX!=bX)return aX<bX;
double cx= (a-O)*(b-O);
if(cx==)return a.x<b.x;
else return cx>;
}
bool cmpY(const P a,const P b){
return a.y<b.y;
} void TuBao(){
st[++top]=p[];
st[++top]=p[];
For(i,,n+){
while( (p[i]-st[top-])*(st[top]-st[top-])>= ) top--;
st[++top]=p[i];
}
} double ans=;
void SpinStir(){
P p1,p2;
int i1,i2;
For(x,,top-){
i1=(x+)%top; p1=st[i1];
i2=(x+)%top; p2=st[i2];
For(y,x+,top-){
int Ni; P Np; Ni=(i1+)%top;
Np=st[Ni];
while(Ni!=x&&(Np-st[y])*(st[x]-st[y])>(p1-st[y])*(st[x]-st[y])){
i1=Ni; p1=Np; Ni=(i1+)%top; Np=st[Ni];
} Ni=(i2+)%top;
Np=st[Ni];
while(Ni!=y&&(Np-st[x])*(st[y]-st[x])>(p2-st[x])*(st[y]-st[x])){
i2=Ni; p2=Np; Ni=(i2+)%top; Np=st[Ni];
} double Sm=(p1-st[y])*(st[x]-st[y])/ + (p2-st[x])*(st[y]-st[x])/;
ans=max(ans,Sm);
}
}
} int main(){
//freopen("ex.in","r",stdin); scanf("%d",&n);
For(i,,n){
scanf("%lf%lf",&p[i].x,&p[i].y);
}
sort(p+,p+n+,cmpY);
O=p[];
sort(p+,p+n+,cmp);
p[n+]=p[];
TuBao();
SpinStir();
printf("%.03lf",ans);
return ; }
BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)的更多相关文章
- BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2978 Solved: 1173[Submit][Sta ...
- bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...
- 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 ...
随机推荐
- Android Wifi简单的梳理【转】
本文转载自:http://blog.csdn.net/gabbzang/article/details/10005411 代表一个已经配置过的网络.包含网络ID(networkId).该网络ID代表的 ...
- 关于JMS和MQ
2.1 什么是JMS? JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输. 2.2 什么是消息模型 ○ Point-to-Point(P2P) --- 点对点 ○ P ...
- javascript类的简单定义
在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript语言不支持"类",但是可 ...
- 分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?
1):Hibernate 中 get() 和 load() 有什么不同之处? 1)Hibernate的 get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在缓存中查 ...
- Windows内存性能分析(二)性能瓶颈
内存瓶颈: 由于可用内存缺乏导致系统性能下降的现像. (一).相关的性能对象 主要考虑内存的页面操作和磁盘的I/O操作,需要考虑如下性能对象: Memory性能对象: 用于分析整个系统的内存瓶颈问题. ...
- jQuery 获取有多个class名的元素
HTML内容: <div class="write-upload"> <p class="write-files old-files"> ...
- Use trained sklearn model with pyspark
Use trained sklearn model with pyspark from pyspark import SparkContext import numpy as np from sk ...
- 联系E-R:学生选课系统
- 1>/dev/null 2>&1 & 意思解析
原文:https://jingyan.baidu.com/article/6dad5075334e26a123e36e31.html 用 /dev/null 2>&1 这样的写法.这条命 ...
- Win7系统中用anaconda配置tensorflow运行环境
前言:anaconda是一个python Data Science Platform.安装它的契机是因为要用tensorflow. 安装完后感觉用它来管理python运行环境还是挺方便的,常用的con ...