BZOJ1209 最佳包裹 (三維凸包 增量法)

2021-09-28 21:23:05 字數 1403 閱讀 9787

求三維凸包的表面積。

n

≤100

n\le100

n≤100

暴力往當前的凸包裡加點。o(n

2)o(n^2)

o(n2

)。題解詳見大佬部落格

擾動函式sha

keshake

shak

e是為了避免四點共面。

實測e ps

epsep

s開到1e−

101e-10

1e−10才過

#include

using

namespace std;

#define il inline

const

double eps =

1e-10

;const

int maxn =

105;

il double

rand()

il double

reps()

;int n;

struct point

il double

len(

) il point operator

-(point o);}

il point operator

*(point o);}

il double

operator

&(point o)

}a[maxn]

;struct face

il double

area()

}f[maxn<<1]

, tmp[maxn<<1]

;bool

see(face a, point b)

int cnt;

bool vis[maxn]

[maxn]

;void

convex3d()

};f[++cnt]

=(face)};

for(

int i =

4, cur; i <= n;

++i)

for(

int j =

1; j <= cnt;

++j)

for(

int k =

0; k <3;

++k)};

}for

(int j =

1; j <= cur;

++j) f[j]

= tmp[j]

; cnt = cur;}}

intmain()

BZOJ1209 最佳包裹 (三維凸包 增量法)

求三維凸包的表面積。n 100n 1 00暴力往當前的凸包裡加點。o n 2 o n2 題解詳見大佬部落格 擾動函式sha kesh ake是為了避免四點共面。實測epse ps開到1e 10 1e 1 0才過 include using namespace std define il inline...

三維凸包 BZOJ 最佳包裹

模板題解 增量法怎麼這麼強啊。擾動很重要,直接掛50分。判斷可視邊緣的方法很神奇,將每個三角面的三邊順方向打有向標記,那麼只有乙個方向有邊的點對就是邊緣點對,直接建面。總的面數是o n o n o n 複雜度為o n 2 o n 2 o n2 可以用乙個有理有據但是有點麻煩的優化 可以做到o n l...

BZOJ 1209 HNOI2004 最佳包裹

一眼掃過去,凸包?資料範圍什麼這麼小?10分鐘碼完了andrew,發現答案不對 臥槽怎麼是三維的。三維凸包不會啊tat 對著白書抄了一遍增量法,水過去了 你這樣真的好嗎 好吧回去再看一遍增量法,感覺很好玩的樣子。很想知道status裡0ms的大爺是怎麼做到的 隨機增量?include include...