尋找三角形

2021-08-04 03:25:39 字數 1402 閱讀 8338

三維空間中有n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用'r', 'g', 'b'表示。

現在要找出三個點,並組成乙個三角形,使得這個三角形的面積最大。

但是三角形必須滿足:三個點的顏色要麼全部相同,要麼全部不同。

輸入描述:

首先輸入乙個正整數n三維座標系內的點的個數.(n <= 50) 

接下來n行,每一行輸入 c x y z,c為'r', 'g', 'b' 的其中乙個。x,y,z是該點的座標。(座標均是0到999之間的整數)

輸出描述:

輸出乙個數表示最大的三角形面積,保留5位小數。

輸入例子1:

5

r 0 0 0

r 0 4 0

r 0 0 3

g 92 14 7

g 12 16 8

輸出例子1:

6.00000

思路:向量叉積

我們來回顧一下三維向量叉積(向量積,如果用同濟版高數的話)的幾何意義:

2個向量x和y的叉積a,方向與這兩個叉積組成的平面垂直,

a的模的大小(a向量的長度),是由x、y這兩個向量組成的平行四邊形的面積。

(或者說,是由這兩個向量組成的三角形的面積的2倍 )。

真忘得一乾二淨的同學,請去參考你們的高數課本。

高數課本看不懂的,可以去買一本《演算法藝術與資訊學競賽》,閱讀其幾何部分(講得挺好、挺清楚的)。

所以說啊,寫個叉積就好了。

(而且這個寫法只需要在最後計算一次sqrt就行了,而不需要3次#include#include#includeusing namespace std;

typedef long long ll;

class node

void get()

node get_across(const node &b)const

double get_length() const

node operator-(const node &b)const

~node(){}

};typedef vectorvn;

vn r,b,g;

double area=0.0;

void loop(vn &r,vn &g,vn &b)

}int main()

loop(r,r,r);

loop(g,g,g);

loop(b,b,b);

loop(r,g,b);

printf("%0.5f",area);

}

尋找三角形

尋找三角形 時間限制 1秒 空間限制 32768k 三維空間中有 n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用 r g b 表示。現在要找出三個點,並組成乙個三角形,使得這個三角形的面積最大。但是三角形必須滿足 三個點的顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正...

尋找三角形

三維空間中有n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用r g b表示。現在要找出三個點,並組成乙個三角形,使得三角形的面積最大。三角形必須滿足 三個點顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正整數n n 50 三維座標系內的點的個數。接下來n行,每一行輸入 c...

程式設計題 尋找三角形

三維空間中有n個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用 r g b 表示。現在要找出三個點,並組成乙個三角形,使得這個三角形的面積最大。但是三角形必須滿足 三個點的顏色要麼全部相同,要麼全部不同。輸入描述 首先輸入乙個正整數n三維座標系內的點的個數.n 50 接下來n行,每...