HDU2202 最大三角形(凸包,列舉)

2022-08-31 10:24:09 字數 2129 閱讀 2619

problem description

老師在計算幾何這門課上給eddy布置了一道題目,題目是這樣的:給定二維的平面上n個不同的點,要求在這些點裡尋找三個點,使他們構成的三角形擁有的面積最大。

eddy對這道題目百思不得其解,想不通用什麼方法來解決,因此他找到了聰明的你,請你幫他解決這個題目。

input

輸入資料報含多組測試用例,每個測試用例的第一行包含乙個整數n,表示一共有n個互不相同的點,接下來的n行每行包含2個整數xi,yi,表示平面上第i個點的x與y座標。你可以認為:3 <= n <= 50000 而且 -10000 <= xi, yi <= 10000.

output

對於每一組測試資料,請輸出構成的最大的三角形的面積,結果保留兩位小數。

每組輸出佔一行。

sample input

3

3 42 6

3 76

2 63 9

2 08 0

6 67 7

sample output

1.50

27.00

author

eddy

recommend

lcy

思路:

最大三角形的三個點一定在點的凸包上,求出凸包之後,直接暴力列舉點即可

**:

#includeusing

namespace

std;

const

int maxn = 55000

;const

int inf = 0x3f3f3f3f

;const

int eps = 1e-8

;int sgn(double x)//

判斷浮點數x的符號,0返回0,正數返回1,負數返回-1

struct

point

point(

int _x, int

_y)

point

operator -(const point &b)const

double

operator ^(const point &b)const

//叉積

double

operator *(const point &b)const

//點積

bool

operator ==(const point &b)const

bool

operator !=(const point&b)const

void input()

};struct

line

line(point _s, point _e)

};double dist(point& a, point& b) //

*兩點間距離

point zero;

intk;

bool cmp(point& a, point &b)

if (sgn(tmp) == 0 && sgn(dist(a, zero) - dist(b, zero)) <= 0

)

return1;

return0;

}int

n;point a[maxn];

intl[maxn];

int cou = 0

;void

gram()

if (n == 2

) l[cou++] = 0

; l[cou++] = 1

;

for (int i = 2; i < n; i++)

l[cou++] =i;

}}int

main()

else

if (a[i].y ==zero.y) }}

gram();

double res = -3

;

for (int i = 0; i < cou; i++) }}

}res = res / 2

; printf("

%.2lf\n

", res);

}}

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

尋找兩個三角形重合部分的最大三角形

如圖所示,兩個三角形重合存在很多種情況,上圖舉出其中4個例子,本文要講的是已知兩個三角形三個頂點座標,求重疊部分最大三角形的頂點座標 雖然已知頂點座標,位置關係已經確定,但是程式設計解決的是一類問題,所以各種情況還是要考慮到。定義變數儲存結果 double resultx 3 double resu...

LeetCode 812 最大三角形面積

給定包含多個點的集合,從其中取三個點組成三角形,返回能組成的最大三角形的面積。示例 輸入 points 0,0 0,1 1,0 0,2 2,0 輸出 2 解釋 這五個點如下圖所示。組成的橙色三角形是最大的,面積為2。注意 3 points.length 50.不存在重複的點。50 points i ...