L3 021 神壇 (30 分 計算幾何

2022-05-01 17:06:13 字數 1513 閱讀 4962

在古老的邁瑞城,巍然屹立著 n 塊神石。長老們商議,選取 3 塊神石圍成乙個神壇。因為神壇的能量強度與它的面積成反比,因此神壇的面積越小越好。特殊地,如果有兩塊神石座標相同,或者三塊神石共線,神壇的面積為0.000

長老們發現這個問題沒有那麼簡單,於是委託你程式設計解決這個難題。

輸入在第一行給出乙個正整數 n(3 ≤ n ≤ 5000)。隨後 n 行,每行有兩個整數,分別表示神石的橫座標、縱座標(− 橫座標、縱座標 

在一行中輸出神壇的最小面積,四捨五入保留 3 位小數。

8

3 42 4

1 14 1

0 33 0

1 34 2

0.500
輸出的數值等於圖中紅色或紫色框線的三角形的面積。

第一次接觸計算幾何的題目 

先算出兩兩邊的向量  再把向量按照極角來排序    然後用叉乘法一一求面積 更新最小值

#includeusing

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);i--)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define pb push_back

#define fi first

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

//#define inf 0x3f3f3f3f

#define n 50010

intn;

struct

nodep[n],temp[n];

bool

cmp(node a,node b)

intmain()

double ans=pow(10,18)/2

;

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

sort(temp+1,temp+t,cmp);

for(int j=1;j1;j++)

}printf(

"%.3f

",ans);

return0;

}

view code

L3 021 神壇 計算幾何

l3 021 神壇 30 分 在古老的邁瑞城,巍然屹立著 n 塊神石。長老們商議,選取 3 塊神石圍成乙個神壇。因為神壇的能量強度與它的面積成反比,因此神壇的面積越小越好。特殊地,如果有兩塊神石座標相同,或者三塊神石共線,神壇的面積為0.000。長老們發現這個問題沒有那麼簡單,於是委託你程式設計解決...

L3 021 神壇 極角排序

l3 021 神壇 30 分 在古老的邁瑞城,巍然屹立著 n 塊神石。長老們商議,選取 3 塊神石圍成乙個神壇。因為神壇的能量強度與它的面積成反比,因此神壇的面積越小越好。特殊地,如果有兩塊神石座標相同,或者三塊神石共線,神壇的面積為0.000。長老們發現這個問題沒有那麼簡單,於是委託你程式設計解決...

團體程式設計天梯賽 L3 021 神壇(極角排序)

思路 1.一共n個點,對於每乙個點我們都可以將它作為頂點,那麼此點和其它n 1個點就會組成n 1個向量 2.n 1個向量中,我們任意選取兩個向量都可以滿足 選取三塊石頭 這個條件,但是我們現在的目標是面積最小,因此我們需要對這n 1個向量進行極角排序 證明請參考 3.a b c a,b,c a,b,...