Hnoi2004 金屬包裹

2022-02-27 14:04:10 字數 2362 閱讀 7902

傳送門

三維凸包模板題……只是聽了聽計算幾何的課之後心血來潮想寫的……

我的做法很無腦是吧……暴力列舉三個點組成的三角形,然後列舉剩下的點,判斷其餘點是否都在這個三角形的同一側,是的話則說明這個三角形是凸包的乙個面。

理論複雜度應該是$o(n^4)$,不過看上去跑得飛快?人帥自帶小常數哈哈

這個故事告訴我們:大力出奇蹟

……

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int maxn=110;10

const

long

double eps=1e-15;11

struct

point

14 point operator-(const point &a)const//

a - b = b到a的位移

15 point operator/(const

long

double &a)const

16}a[maxn];

17typedef point vector;

18long

double

noise();

19long

double dot(const vector&,const vector&);

20 vector cross(const vector&,const vector&);

21long

double length(const vector&);

22long

double area2(const point&,const point&,const point&);

23 vector lawvector(const vector&,const vector&);

24long

double distance(const point&,const point&,const vector&);

25 ifstream fin("

enwrap.in");

26 ofstream fout("

enwrap.out");

27long

double ans=0.0;28

intn,t;

29int

main()

37vector a;

38long

double

d;39

bool

bad;

40for(int i=1;i<=n;i++)for(int j=1;jfor(int k=1;k)51}

52if(!bad)ans+=area2(a[i],a[j],a[k]);53}

54 ans/=2.0

;55 fout<

<

56return0;

57}58long

double

noise()

64 inline long

double dot(const vector &a,const vector &b)

65 inline vector cross(const vector &a,const vector &b)

66 inline long

double length(const vector &a)

67 inline long

double area2(const point &a,const point &b,const point &c)

68 inline vector lawvector(const vector &a,const vector &b)//

兩個向量的叉積一定同時垂直於這兩個向量

72 inline long

double distance(const point &a,const point &p,const vector &n)//

(p,n)是平面的點法式,n是單位向量

73/*

74三維凸包——暴力法

75暴力列舉三個點組成的三角形,

76判斷其他點是否都在這個三角形的同側,

77是則說明這個三角形一定是凸包的乙個面。

78*/

view code

話說一開始忘了怎麼求平面的法向量,手推了個公式然後發現搞出nan了……因為我推的公式預設法向量在z維的長度不為0,但其實有很多平面的法向量是垂直於z軸的,然後就除零**了……又腦補了很久,後來才想起來兩個向量的叉積必定同時垂直於這兩個向量……這人沒救了

還有一件事,這題卡精度,隨機擾亂搞得太大會炸精度……計算幾何毀我青春

HNOI2004寵物收養所

time limit 10 sec memory limit 162 mb submit 2796 solved 995 submit status discuss 最近,阿q開了一間寵物收養所。收養所提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,...

HNOI2004 寵物收養場

凡凡開了一間寵物收養場。收養場提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a a是乙個正整數,a 2 31 而他也給每個處在收養場的寵物乙個特點值。這樣他就能夠...

HNOI2004 樹的計數

hnoi2004 樹的計數 這道題資料水的一匹我無話可說,謎之錯誤 陣列賦值的時候乙個下標寫錯了變數 居然只wa了一組。寫這道題關鍵需要知道prufer序列以及cayley定理。prufer數列,可以用來解一些關於無根樹計數的問題。prufer數列是一種無根樹的編碼表示,對於一棵n個節點帶編號的無根...