題目:
題意:就是給定一些點,點的個數最多為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 輸出...