求三維凸包的表面積。
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...