# Geometry# Brute Force# Area Calculation

b288 - 夏季大三角

🔗 前往 ZeroJudge 原題

題目描述

題目給定 N 個點的座標,要求找出其中三個點所構成的最大三角形面積。

解題思路

此題採用暴力解法。由於點的數量不多 (N <= 1000),我們可以枚舉所有可能的三個點的組合,計算每個組合所形成的三角形面積,並記錄下最大面積。三角形面積的計算使用行列式公式。

複雜度分析

  • 時間複雜度: O(n^3) (需要遍歷所有 n*(n-1)*(n-2)/6 種組合)
  • 空間複雜度: O(n) (儲存座標點的陣列)

程式碼

#include <iostream>
#include <iomanip>
using namespace std;
double b[1001][2];
int main(){
	int a;
	while(cin >> a){
		for(int i=0;i<a;++i)
			cin >> b[i][0] >> b[i][1];
		double max=0;
		for(int i=0;i<a;++i){
			for(int j=i+1;j<a;++j){
				for(int k=j+1;k<a;++k){
					double t=0.5*(b[i][0]*b[j][1]+b[j][0]*b[k][1]+b[i][1]*b[k][0]-b[i][1]*b[j][0]-b[j][1]*b[k][0]-b[i][0]*b[k][1]);
					if(t<0)t*=-1;
					if(t>max)max=t;
				}
			}
		}
		cout << fixed << setprecision(6) << max << "\n";
	}
}

Discussion