洛谷P2742 模板 二維凸包

2022-04-30 04:39:11 字數 856 閱讀 2321

求凸包

andrew演算法:

首先按照$x$為第一關鍵字,$y$為第二關鍵字從小到大排序,並刪除重複的點

用棧維護凸包內的點

1、把$p_1, p_2$放入棧中

2、若$p_}$在直線$p_, p_$的右側,則不斷的彈出棧頂,直到該點在直線左側

3、此時我們已經得到了下凸包,那麼反過來從$p_n$再做一次即可得到下凸包

這裡主要是更新一下模板

//

luogu-judger-enable-o2

#include#include

#include

using

namespace

std;

const

int eps = 1e-10

;int dcmp(double

x) #define point vector

struct

vector ;

bool

operator

< (const vector &rhs) const

vector

operator - (const vector &rhs) const

};double

cross(vector a, vector b)

double

dis(point a, point b)

intn;

point p[

10001], q[10001

];int

top;

void

push(point p)

void

andrew()

intmain()

洛谷P2742 二維凸包

有n個點,求凸包長度,0 n 10000 前置知識 向量的外積 叉積,用於判斷新加入的點能否與原本構成凸殼。a x1,y1 b x2,y 2 vec x1,y1 vec x2,y2 a x1,y1 b x 2,y2 a b x1y2 y1x 2 vec vec x1y2 y1x2 a b x1 y2...

二維凸包演算法

部落格參考 謝謝 chao xun 把凸包寫的這麼詳細。關於凸包的問題的解決的最初思路是這樣的。1 找到乙個基準點 必須在凸邊上 2 以基準點做射線,然後將該射線向固定方向旋轉,直到接觸到乙個新的點。3 以 2 中找到的點作為新的基準點,作射線繼續朝著一開始的固定的方向旋轉 4 反覆重複2,3直到最...

題解 二維凸包

呵呵呵複習一下這個東西免得做到計算幾何連暴力都不會嚶嚶嚶 免得到時候寫斜率優化結果凸包不會了嚶嚶嚶 數學走起 vec x 1,y 1 vec x 2,y 2 shadow times vec x 1y 2 x 2y 1 根據右手螺旋定則。shadow 是我亂搞的符號,雖然我搞不懂為什麼是這樣,但是這...