SPOJ3931 N個點形成三角形的最大面積

2021-06-18 04:37:47 字數 848 閱讀 6796

題目:

題意:就是給定一些點,點的個數最多為50000,從這n個點中選3個點形成的三角形面積最大是多少?

分析:對於這個問題,在網上題解中各種方法都有,但是大部分都是不可靠的,現在我知道的最快的正確方法是

o(n^2)的。

貌似還有o(nlog(n))的演算法。我們可以這樣考慮:

最大面積的三角形三個點一定是在這些點的凸包上,然後我們用旋轉卡殼做。思路是這樣的:

在求出的凸包中,我們先固定i,j這兩個相鄰的點,然後找形成的三角形面積最大的那個k點,然後再固定

i點,列舉j點,由於

k點是隨著j點的變化而變化,所以k點不必從開頭開始列舉。

#include #include #include #include #include using namespace std;

const int n=50005;

struct point

;point stack[n];

point p[n];

point mina;

int top;

double dist(point a,point b)

double cross(point a,point b,point c)

bool cmp(point a,point b)

}double rotating_calipers(int n)

{ int j=1,k=0;

double ans=0;

for(int i=0;i

空間中任意三個點組成三角形面積

問題1 遍歷所有可能的3個點 for inti 0 i n i for intj i 1 j n j for intk j 1 k n k 問題2 判斷3個點是否能組成三角形 doublea dis i,j 計算兩點距離 doubleb dis i,k doublec dis k,j if a b ...

判斷乙個點是否在三角形內部

題目 在二維座標系中,所有的值都是double型,那麼乙個三角形可以由三個點來代表,給定三個點代表的三角形,再給定乙個點 x,y 判斷 x,y 是否在三角形中 基本思路 如果乙個點o在三角形的內部,那麼從三角形的乙個點出發,逆時針走過所有邊的過程中,點o始終在走過邊的左邊。如果點o在外側,則不滿足這...

判斷乙個點是否在三角形內部

判斷乙個點是否在三角形內部 在二維座標系中,所有的值都是double型別,那麼乙個三角形可以由3個點來代表,給定3個點代表的三角形,再給定乙個點 x,y 判斷 x,y 是否在三角形中 輸入描述 輸入有四行,每行兩個浮點數。前三行的6個數分別代表三角形的三個頂點的座標 最後兩個數分別表示 x,y 輸出...