bzoj1185 HNOI2007 最小矩形覆蓋

2022-05-01 07:18:11 字數 1364 閱讀 7586

time limit: 10 sec  memory limit: 162 mbsec  special judge

submit: 1945  solved: 853

[submit][status][discuss]

分析:有乙個比較顯然的結論:最小的矩形一定有一條邊在凸包上.利用旋轉卡殼求出對應邊的最遠點.這兩個是比較容易做到的,有點難的是如何求另外兩邊的最遠點.

另外兩個點的位置顯然是單峰函式,可以利用旋轉卡殼的思想.關鍵就是如何以當前凸包的邊為x軸來找最遠的點,這裡不能單單只找橫座標最大/小的點.利用點積,就能將邊投影到凸包的邊上去,也就是比較點積的大小.那麼思路基本上就出來了:底邊固定了,最高點利用叉積(旋轉卡殼)來確定,左右兩個點用點積來確定.最後求矩形的長和高,利用叉積求高,點積求長.求四個頂點的位置則利用向量的伸縮(比例).

#include #include 

#include

#include

#include

using

namespace

std;

const

double eps = 1e-10

;int

n,tot;

double maxx =1e12;

struct

node

node(

double _x,double

_y) :x(_x),y(_y) {}

} e[

50010],ans[10],p[50010

];double

dist(node a,node b)

double

det(node a,node b) //叉積

double

dot(node a,node b) //點積

node

operator +(node a,node b)

node

operator -(node a,node b)

node

operator * (node a,double

x)int three(double

x) //三態函式

bool

operator

if (three(a.y - b.y) == -1

)

return

true

;

return

false;}

bool

cmp(node a,node b)

void

solve() //求凸包

}void

solve2()

}}int

main()

BZOJ1185 HNOI2007 最小矩形覆蓋

題目描述 給定一些點的座標,要求求能夠覆蓋所有點的最小面積的矩形,輸出所求矩形的面積和四個頂點座標 輸入輸出格式 輸入格式 第一行為乙個整數n 3 n 50000 從第2至第n 1行每行有兩個浮點數,表示乙個頂點的x和y座標,不用科學計數法 輸出格式 第一行為乙個浮點數,表示所求矩形的面積 精確到小...

Bzoj1185 HNOI2007 最小矩形覆蓋

time limit 10 sec memory limit 162 mbsec special judge submit 1653 solved 745 submit status discuss 計算幾何 vfleaking提供spj 數學問題 計算幾何 旋轉卡殼 按順序列舉凸包上每一條邊為底邊...

狡猾的商人 bzoj1202,HNOI2005

ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...