1069: [SCOI2007]最大土地面积 - BZOJ
Description
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。
Input
第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。
Output
最大的多边形面积,答案精确到小数点后3位。
Sample Input
5
0 0
1 0
1 1
0 1
0.5 0.5
Sample Output
1.000
HINT
数据范围 n<=2000, |x|,|y|<=100000
先求凸包
然后枚举四边形的对角线,分别找到距离最远的两个点更新答案(这两个点都是单调的),总复杂度是O(n^2)的
哪里写挫了,超慢,总时间1600ms
const
maxn=;
type
point=record
x,y:double;
end;
var
a:array[..maxn]of point;
n:longint;
min:point; function cj(a,b,c:point):double;
begin
exit((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y));
end; procedure swap(var x,y:point);
var
t:point;
begin
t:=x;x:=y;y:=t;
end; procedure sort(l,r:longint);
var
i,j:longint;
y:point;
begin
i:=l;
j:=r;
y:=a[(l+r)>>];
repeat
while cj(y,a[i],min)< do
inc(i);
while cj(y,a[j],min)> do
dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);
dec(j);
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j);
end; procedure init;
var
i:longint;
begin
read(n);
min.x:=maxlongint;
min.y:=maxlongint;
for i:= to n do
begin
read(a[i].x,a[i].y);
if (a[i].x<min.x) or ((a[i].x=min.x) and (a[i].y<min.y)) then min:=a[i];
end;
i:=n;
while i> do
begin
if (a[i].x=min.x) and (a[i].y=min.y) then
begin
a[i]:=a[n];
dec(n);
end
else dec(i);
end;
sort(,n);
inc(n);
a[n]:=min;
a[]:=min;
end; var
q:array[..maxn]of longint;
f:array[..maxn,..]of double;
tot,lasta,lastb:longint;
ans:double; function up(var x:double;y:double):boolean;
begin
if x<y then
begin
x:=y;
exit(true);
end;
exit(false);
end; function down(var x:double;y:double):boolean;
begin
if x>y then
begin
x:=y;
exit(true);
end;
exit(false);
end; procedure work;
var
i,j:longint;
begin
for i:= to n do
begin
while (tot>) and (cj(a[i],a[q[tot]],a[q[tot-]])>=) do
dec(tot);
inc(tot);
q[tot]:=i;
end;
for i:= to tot- do
begin
f[i+,]:=-maxlongint;
f[i+,]:=;
for j:= to n do
if up(f[i+,],cj(a[q[i+]],a[q[j]],a[q[i]])) then lasta:=j;
lastb:=i;
for j:=i+ to tot do
begin
f[j,]:=cj(a[q[j]],a[q[lasta]],a[q[i]]);
f[j,]:=cj(a[q[j]],a[q[lastb]],a[q[i]]);
while up(f[j,],cj(a[q[j]],a[q[lasta mod tot+]],a[q[i]])) do
lasta:=lasta mod tot+;
while down(f[j,],cj(a[q[j]],a[q[lastb mod tot+]],a[q[i]])) do
lastb:=lastb mod tot+;
up(ans,f[j,]-f[j,]);
end;
end;
writeln(ans/::);
end; begin
init;
work;
end.
1069: [SCOI2007]最大土地面积 - BZOJ的更多相关文章
- bzoj 1069 [SCOI2007]最大土地面积(旋转卡壳)
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2277 Solved: 853[Submit][Stat ...
- BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2978 Solved: 1173[Submit][Sta ...
- BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)
题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...
- 1069: [SCOI2007]最大土地面积
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2961 Solved: 1162[Submit][Sta ...
- 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)
http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...
- ●BZOJ 1069 [SCOI2007]最大土地面积
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...
- bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1069 发现 n 可以 n^2 .所以枚举对角线,分开的两部分三角形就可以旋转卡壳了. 注意坐 ...
- [BZOJ]1069: [SCOI2007]最大土地面积
题目大意:给出二维平面上n个点,求最大的由这些点组成的四边形面积.(n<=2000) 思路:求出凸包后旋转卡壳枚举对踵点对作为四边形的对角线,枚举或二分另外两个点,复杂度O(n^2)或O(nlo ...
- bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳
题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...
随机推荐
- IOS显示九宫格列表
//总列数 ; CGFloat appW = ; CGFloat appH = ; //间隙 CGFloat maginX = (self.view.frame.size.width - totalC ...
- C# lock用法
当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...
- Windows Phone 8开发环境搭建
开发Windows Phone需要两个工具:Windows Phone SDK 8.0和Visual Studio集成开发工具.我们购买的Visual Studio Ultimate 2012不包括W ...
- 【学习笔记】【C语言】二维数组
1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...
- 最新13个加速 Web 开发的框架和工具
我们为开发人员挑选了15个最新的Web开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给用户更 ...
- 运行maven报错:经过检查是因为maven不兼容jdk1.6,重新安装1.7解决
cmd mvn -v报错: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apach ...
- C#各种常用开源框架-支持开源!分享!
下面罗列了开发及学习过程中所涉及的开源类库的列表! AForge.NET Accord.NET NAudio nVLC Speex C# WebServer FFmpeg FFmpeg.NET Flo ...
- ajax对一些没有接口的数据进行分析和添加方法
对于一些没有接口的数据进行分析和添加方法: <script src="ajax.js"><script>//插入ajax文件 <script> ...
- mongodb的常用操作(二)
继续mongodb的学习: 9.mongodb条件查询 假设有user集合,里面结构如下:{ "_id" : ObjectId("52ab35d281181f853264 ...
- IDEA笔记
快捷键: 查找类:ctrl + shif + R (eclipse)查找文件:double shift查找文件中的变量名和方法:ctrl + H (eclipse)system.out:输入 sout ...