[BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)
题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成。
的多边形面积最大。n<=2000。
先求凸包,再枚举对角线,随着对角线的斜率上升,另外两个点的在凸包上的位置也是单调的。
水平扫描法:先将所有点按x排序,然后从左往右边扫边求出上凸壳,然后从右往左扫出下凸壳。最后会发现a[tot]=a[1]。
- #include<cstdio>
- #include<algorithm>
- #define rep(i,l,r) for (int i=(l); i<=(r); i++)
- using namespace std;
- const int N=;
- int n,r,p1,p2,q[N];
- double ans;
- struct P{
- double x,y;
- bool operator <(const P &b)const{ return x==b.x ? y<b.y : x<b.x; }
- P operator -(const P &b)const{ return (P){x-b.x,y-b.y}; }
- double operator *(const P &b)const{ return x*b.y-y*b.x; }
- }a[N];
- double cj(int x,int y,int z){ return (a[x]-a[y])*(a[z]-a[y]); }
- int main(){
- freopen("bzoj1069.in","r",stdin);
- freopen("bzoj1069.out","w",stdout);
- scanf("%d",&n);
- rep(i,,n) scanf("%lf%lf",&a[i].x,&a[i].y);
- sort(a+,a+n+);
- rep(i,,n){
- while (r> && cj(q[r],q[r-],i)>=) r--;
- q[++r]=i;
- }
- int rr=r;
- for (int i=n-; i>=; i--){
- while (r>rr && cj(q[r],q[r-],i)>=) r--;
- q[++r]=i;
- }
- rep(i,,r-){
- int p1=i+,p2=i+;
- rep(j,i+,r-){
- while (p1<j- && cj(q[j],q[i],q[p1])<=cj(q[j],q[i],q[p1+])) p1++;
- while (p2<=j || (p2<r- && cj(q[p2],q[i],q[j])<=cj(q[p2+],q[i],q[j]))) p2++;
- ans=max(ans,cj(q[j],q[i],q[p1])+cj(q[p2],q[i],q[j]));
- }
- }
- printf("%.3lf\n",ans/);
- return ;
- }
[BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)的更多相关文章
- BZOJ 1069 求凸包+旋转卡壳
思路: 求凸包: 先按照x轴排个序 从左往右扫一遍 找到上凸壳 (用叉积) 再从右往左扫一遍 求下凸壳 搞个旋转卡壳就好啦~ 嗯 我手懒 用的C++ Complex库 巨好用! //By Sirius ...
- (模板)poj1113(graham扫描法求凸包)
题目链接:https://vjudge.net/problem/POJ-1113 题意:简化下题意即求凸包的周长+2×PI×r. 思路:用graham求凸包,模板是kuangbin的. AC code ...
- [USACO2003][poj2187]Beauty Contest(凸包+旋转卡壳)
http://poj.org/problem?id=2187 题意:老题了,求平面内最远点对(让本渣默默想到了悲剧的AHOI2012……) 分析: nlogn的凸包+旋转卡壳 附:http://www ...
- UVA 4728 Squares(凸包+旋转卡壳)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17267 [思路] 凸包+旋转卡壳 求出凸包,用旋转卡壳算出凸包的直 ...
- Code Chef GEOCHEAT(凸包+旋转卡壳+随机化)
题面 传送门 题解 以下记\(S_i=\{1,2,3,...,i\}\) 我们先用凸包+旋转卡壳求出直径的长度,并记直径的两个端点为\(i,j\)(如果有多条直径随机取两个端点) 因为这个序列被\(r ...
- poj 2079 Triangle (二维凸包旋转卡壳)
Triangle Time Limit: 3000MS Memory Limit: 30000KB 64bit IO Format: %I64d & %I64u Submit Stat ...
- poj 2187 Beauty Contest(二维凸包旋转卡壳)
D - Beauty Contest Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- POJ 2187 凸包+旋转卡壳
思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说 凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...
- bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...
随机推荐
- GDB使用小记
By francis_hao Nov 7,2016 记录GDB常用功能. GDB可以让你查看一个程序在运行时其内部发生了什么,或者当一个程序崩溃时发生了什么(通过使用GDB查看core dum ...
- phpAdmin 修改密码后拒绝登陆
phpMyadmin没配置正确,打开 phpMyadmin 目录找到config.inc.php文件,查找到$cfg['Servers'][$i]['password']='';这行,在''中输入你正 ...
- HDU 1840 Equations (数学)
title: Equations 数学 杭电1840 tags: [数学] 题目链接 Problem Description All the problems in this contest tota ...
- [bzoj3669][Noi2014]魔法森林——lct
Brief description 给定一个无向图,求从1到n的一条路径使得这条路径上最大的a和b最小. Algorithm Design 以下内容选自某HN神犇的blog 双瓶颈的最小生成树的感觉, ...
- bzoj 3196二逼平衡树 线段树套平衡树
比较裸的树套树,对于区间K值bz上有一道裸题,详见题解http://www.cnblogs.com/BLADEVIL/p/3455336.html(其实题解也不是很详细) //By BLADEVIL ...
- kthread_create与kernel_thread的区别【栈】
转自:http://blog.chinaunix.net/uid-25513153-id-2888903.html kthread_create与kernel_thread的区别 kernel thr ...
- 虚拟机VMware 安装CentOS6.5
对linux完全小白的情况下,也能依据下面的文章,一步一步安装使用成功! CentOS 6.5 下载http://www.linuxdown.net/CentOS/2014/0928/3371.htm ...
- 智联招聘的python岗位数据词云制作
# 根据传入的背景图片路径和词频字典.字体文件,生成指定名称的词云图片 def generate_word_cloud(img_bg_path, top_words_with_freq, font_p ...
- windows使用celery遇到的错误
https://www.jianshu.com/p/e5539d96641c 按照这个教程一步步执行到最后报错了. 运行task_dispatcher.py的时候 ValueError: not en ...
- 取Session数据语句在应放在哪里
UsersModel loginUser = (UsersModel)Session["usersModel"]; 直接放在 public partial class PagesF ...