模板題解
增量法怎麼這麼強啊。
擾動很重要,直接掛50分。
判斷可視邊緣的方法很神奇,將每個三角面的三邊順方向打有向標記,那麼只有乙個方向有邊的點對就是邊緣點對,直接建面。
總的面數是o(n
)o(n)
o(n)
,複雜度為o(n
2)
o(n^2)
o(n2
)可以用乙個有理有據但是有點麻煩的優化:
可以做到o(n
logn)
o(n\log n)
o(nlogn)
a cc
od
e\rm
accode
#include
#define maxn 2005
#define eps 1e-11
using
namespace std;
int n;
#define db double
struct point
point operator-(
const point &b)
const
point operator*(
const point &b)
const
db operator^(
const point &b)
const
db nor()
}p[maxn]
;struct face
point nor()
db area()
}f[maxn]
,t[maxn]
;int cnt,cnt2;
bool vis[maxn]
[maxn]
;bool
cansee
(face &a,point &b)
intmain()
for(
int j=
0;j)for
(int k=
0,x,y;k<
3;k++)if
(vis[x=f[j]
.v[k]
][y=f[j]
.v[(k+1)
%3]]
&&!vis[y]
[x])
t[cnt2++]=
face
(x,y,i)
;for
(int j=
0;j) f[j]
= t[j]
; cnt=cnt2 , cnt2 =0;
}double ans =0;
for(
int i=
0;i) ans +
= f[i]
.area()
;printf
("%.6lf"
,ans)
;}
BZOJ1209 最佳包裹 (三維凸包 增量法)
求三維凸包的表面積。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 ...
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...
bzoj1964 hull 三維凸包
傳送門 二維平面四個點求凸包面積 任選三個點面積之和 2 三維平面五個點求凸包體積 任選四個點體積之和 2 二維平面三個點面積 二個二維向量行列式值的絕對值 2 三維平面四個點體積 三個三維向量行列式值的絕對值 6 1 achen 2 include3 include4 include5 inclu...