就是一道凸包(枚举凸包的边作为矩形的一条边)的裸题,只是不太好打,所以犹豫到今天才打

不说了,说起AC都是泪啊,因为没有精度判断,没有判重(算距离时除0了)错了好久
拍了好久都和标称是一样的,因为我是随机生成数据,基本不可能有重复的点
代码请自动无视...193行pascal(都是一坨一坨的)

 const
eps=1e-7;
var
x,y:array[..]of extended;
s:array[..]of longint;
p:array[..,..]of longint;
n,tot:longint;
sp:extended; procedure swap(var x,y:extended);
var
t:extended;
begin
t:=x;x:=y;y:=t;
end; function min(x,y:extended):extended;
begin
if x<y then exit(x);
exit(y);
end; function cj(x1,y1,x2,y2,x3,y3:extended):extended;
begin
exit((y1-y2)*(x3-x1)+(x2-x1)*(y3-y1));
end; function jl(x1,y1,x2,y2,x3,y3:extended):extended;
begin
exit(cj(x1,y1,x2,y2,x3,y3)/sqrt(sqr(x1-x2)+sqr(y1-y2)));
end; procedure jiao(var x,y:extended;x1,y1,x2,y2,x3,y3:extended);
begin
x3:=x3-x1;
y3:=y3-y1;
if abs(x2)<eps then
begin
x:=x1;
y:=y1+y3;
exit;
end;
if abs(y2)<eps then
begin
x:=x1+x3;
y:=y1;
exit;
end;
x2:=y2/x2;
y3:=y3+x3/x2;
x3:=-/x2;
x:=y3/(x2-x3);
y:=x*x2;
x:=x+x1;
y:=y+y1;
end; procedure sort(l,r:longint);
var
i,j:longint;
xi,yi:extended;
begin
i:=l;
j:=r;
xi:=x[(l+r)>>];
yi:=y[(l+r)>>];
repeat
while (cj(x[],y[],xi,yi,x[i],y[i])<)and(abs(cj(x[],y[],xi,yi,x[i],y[i]))>eps) do
inc(i);
while (cj(x[],y[],xi,yi,x[j],y[j])>)and(abs(cj(x[],y[],xi,yi,x[j],y[j]))>eps) do
dec(j);
if i<=j then
begin
swap(x[i],x[j]);
swap(y[i],y[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;
minx,miny:extended;
begin
read(n);
minx:=;
miny:=;
for i:= to n do
begin
read(x[i],y[i]);
if (y[i]<miny)or((abs(y[i]-miny)<eps)and(x[i]<minx)) then
begin
minx:=x[i];
miny:=y[i];
end;
end;
i:=;
while i<=n do
if (abs(x[i]-minx)<eps)and(abs(y[i]-miny)<eps) then
begin
swap(x[i],x[n]);
swap(y[i],y[n]);
dec(n);
end
else inc(i);
x[]:=minx;
y[]:=miny;
sort(,n);
inc(n);
x[n]:=x[];
y[n]:=y[];
end; procedure work;
var
i:longint;
begin
for i:= to n do
begin
while (tot>)and(cj(x[s[tot-]],y[s[tot-]],x[s[tot]],y[s[tot]],x[i],y[i])<) do
dec(tot);
inc(tot);
s[tot]:=i;
if (abs(x[s[tot]]-x[s[tot-]])<eps)and(abs(y[s[tot]]-y[s[tot-]])<eps) then dec(tot);
end;
for i:= to tot do
begin
x[i]:=x[s[i]];
y[i]:=y[s[i]];
end;
n:=tot;
for i:= to n do
begin
if jl(-y[],x[],-y[],x[],x[i],y[i])<jl(-y[],x[],-y[],x[],x[p[,]],y[p[,]]) then p[,]:=i;
if jl(x[],y[],x[],y[],x[i],y[i])>jl(x[],y[],x[],y[],x[p[,]],y[p[,]]) then p[,]:=i;
if jl(-y[],x[],-y[],x[],x[i],y[i])>jl(-y[],x[],-y[],x[],x[p[,]],y[p[,]]) then p[,]:=i;
end;
for i:= to n- do
begin
p[i]:=p[i-];
p[i,]:=i;
while jl(-y[i],x[i],-y[i+],x[i+],x[(p[i,]+)mod n],y[(p[i,]+)mod n])<jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]]) do
p[i,]:=(p[i,]+)mod n;
while jl(x[i],y[i],x[i+],y[i+],x[(p[i,]+)mod n],y[(p[i,]+)mod n])>jl(x[i],y[i],x[i+],y[i+],x[p[i,]],y[p[i,]]) do
p[i,]:=(p[i,]+)mod n;
while jl(-y[i],x[i],-y[i+],x[i+],x[(p[i,]+)mod n],y[(p[i,]+)mod n])>jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]]) do
p[i,]:=(p[i,]+)mod n;
end;
sp:=;
for i:= to n- do
sp:=min(sp,abs((jl(x[i],y[i],x[i+],y[i+],x[p[i,]],y[p[i,]])-jl(x[i],y[i],x[i+],y[i+],x[p[i,]],y[p[i,]]))*(jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]])-jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]]))));
writeln(sp::);
for i:= to n- do
if abs(abs((jl(x[i],y[i],x[i+],y[i+],x[p[i,]],y[p[i,]])-jl(x[i],y[i],x[i+],y[i+],x[p[i,]],y[p[i,]]))*(jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]])-jl(-y[i],x[i],-y[i+],x[i+],x[p[i,]],y[p[i,]])))-sp)<eps then break;
jiao(x[n+],y[n+],x[i],y[i],x[i+]-x[i],y[i+]-y[i],x[p[i,]],y[p[i,]]);
jiao(x[n+],y[n+],x[p[i,]],y[p[i,]],y[i]-y[i+],x[i+]-x[i],x[p[i,]],y[p[i,]]);
jiao(x[n+],y[n+],x[p[i,]],y[p[i,]],x[i+]-x[i],y[i+]-y[i],x[p[i,]],y[p[i,]]);
jiao(x[n+],y[n+],x[p[i,]],y[p[i,]],y[i]-y[i+],x[i+]-x[i],x[i],y[i]);
x[]:=;
y[]:=;
for i:= to do
if (y[n+i]<y[])or((abs(y[]-y[n+i])<eps)and(x[n+i]<x[])) then
begin
x[]:=x[n+i];
y[]:=y[n+i];
end;
for i:= to do
if (abs(x[]-x[n+i])<eps)and(abs(y[]-y[n+i])<eps) then break;
swap(x[n+],x[n+i]);
swap(y[n+],y[n+i]);
writeln(x[]+eps::,' ',y[]+eps::);
sort(n+,n+);
for i:= to do
writeln(x[n+i]+eps::,' ',y[n+i]+eps::);
end; begin
init;
work;
end.

1185: [HNOI2007]最小矩形覆盖 - BZOJ的更多相关文章

  1. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

  2. BZOJ:1185: [HNOI2007]最小矩形覆盖

    1185: [HNOI2007]最小矩形覆盖 这计算几何……果然很烦…… 发现自己不会旋转卡壳,补了下,然后发现求凸包也不会…… 凸包:找一个最左下的点,其他点按照与它连边的夹角排序,然后维护一个栈用 ...

  3. BZOJ 1185: [HNOI2007]最小矩形覆盖 [旋转卡壳]

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1435  Solve ...

  4. 1185: [HNOI2007]最小矩形覆盖

    1185: [HNOI2007]最小矩形覆盖 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1426  Solve ...

  5. bzoj 1185 [HNOI2007]最小矩形覆盖 凸包+旋转卡壳

    题目大意 用最小矩形覆盖平面上所有的点 分析 有一结论:最小矩形中有一条边在凸包的边上,不然可以旋转一个角度让面积变小 简略证明 我们逆时针枚举一条边 用旋转卡壳维护此时最左,最右,最上的点 注意 注 ...

  6. ●BZOJ 1185 [HNOI2007]最小矩形覆盖

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1185 题解: 计算几何,凸包,旋转卡壳 结论:矩形的某一条边在凸包的一条边所在的直线上. ( ...

  7. BZOJ 1185 [HNOI2007]最小矩形覆盖:凸包 + 旋转卡壳

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 题意: 给出二维平面上的n个点,问你将所有点覆盖的最小矩形面积. 题解: 先找出凸 ...

  8. bzoj 1185 [HNOI2007]最小矩形覆盖——旋转卡壳

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 矩形一定贴着凸包的一条边.不过只是感觉这样. 枚举一条边,对面的点就是正常的旋转卡壳. ...

  9. BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子

    来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...

随机推荐

  1. JavaScript之Loading进度条

    一个loading进度条,定义一个fakeProgress方法,定位一个URL,然后setTimeout设置跳转时间我们就能看到我们要打开的URL网址了. 这个链接我就直接链接到我的新浪博客去了,算是 ...

  2. Android简单计算器

    这是很久之前做的,方法很简单,都是一些基础的,不足的是还有很多功能不够. activity_main.xml布局: <LinearLayout xmlns:android="http: ...

  3. Java使用泛型类来提高方法的可重用性

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832268.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. Windows Phone使用sliverlight toolkit实现页面切换动画效果

    使用应用时,好多app在页面切换的时候都有一个动画效果,感觉很炫,也大大增加了用户体验,怎么实现呢? 界面的切换,可以用Windows Phone Toolkit中的TransitionService ...

  5. Java多线程(六) 线程系列总结

    多线程系列终于终结得差不多,本人对该系列所做的总结大致如下: 线程锁模块耗费了大量的时间,底层的AQS实现比较复杂.仍然没有时间总结源码部分,能够坚持写下这么几个篇幅的内容真心佩服自己....希望继续 ...

  6. mysql 不能远程连接

    不想浪费大家时间,我这文章记录了我在vagrant上架的mysql远程连接不上的问题,不过我在整理时发现这个下面这个链接,如果我一开始能找到这个我就不会绕那么多弯了.不想看我是怎么一步步调错过程的请直 ...

  7. HTTP Error 500.21解决方案

    Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决方案   今天在测试网站的时候,在浏览器中输入http://localhost/时 ...

  8. [ Database ] [ Sybase ] [ SQLServer ] sybase 與SQL Server的界接方式

    目前我們有個專案Server A安裝了 SQL Server 2012,有個需求需要連線到另外一台Server B上的 Sybase 12.5的view, 先前試過了很多方法都無法連通.主要的原因是因 ...

  9. PhpExcel数组输出到Excel浏览器下载

    经常是mysql查出二维数组,并且数组的带key也是有意义的,考虑到经常用,就打算弄个函数出来,方便以后用! 相对是规范的数组哈,具体可看下$data数组: 生成的excel第一行是对应的key: 直 ...

  10. shopnc 商城源码阅读笔记--开篇概述

    关于shopnc 以下是摘抄自百度百科的关于shopnc的介绍: ShopNC商城系统,是天津市网城天创科技有限责任公司开发的一套多店模式的商城系统. 本系统具有商城系统非常完整和专业的功能与流程,系 ...