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 ...
随机推荐
- iOS 9 Safari广告拦截插件
相对于谷歌对广告拦截的禁止,苹果与之态度截然相反,继Mac版Safari加入广告拦截工具之后,即将到来的iOS9对Safari也引入了内容拦截插件-Content Blocker,并且开发者可以使用最 ...
- debian支持的系统架构介绍
debian系统支持类型有armel.armhf.i386.amd64.mips.mipsel, powerpc.sparc.s390.s390x等. 详细对比文章见https://www.debia ...
- TP框架控制器和对应方法创建
控制器和对应方法创建 控制器是MVC模式中的核心,TP默认有一个控制器: Index控制器里面有一个操作方法:Index 我们在访问http://localhost:8080/Thinkphp ...
- JS获取首字母
function pySegSort(arr, empty) { if (!String.prototype.localeCompare) return null; var letters = &qu ...
- (转)C++经典面试题(最全,面中率最高)
1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数.malloc与free是C++/C语言的标准库函数,new ...
- java-05 面向对象
class StudentDemo { String name; int age; String address; public void study(){ System.out.println(&q ...
- 1076 Forwards on Weibo (30)(30 分)
Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...
- BZOJ3110:[ZJOI2013]K大数查询
浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...
- JavaScript:bootstrap 模态框的简单应用
最近用上了bootstrap这个强大的前端框架,有空来总结一下.这里记录下模态框的简单应用. 首先,要在页面中引入相应的js.css文件 <link href="css/bootstr ...
- Balloon Comes! hdu(小数位数处理)
Balloon Comes! Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): A ...