# Geometry# Math# Heron's Formula

f425 - 高雄市109年資訊競賽國中組第三題

🔗 前往 ZeroJudge 原題

題目描述

題目給定六個座標點 (a, b), (c, d), (e, f),代表一個三角形的三個頂點。要求計算這個三角形的面積,並輸出四捨五入到整數的面積值。

解題思路

題目要求計算三角形面積,給定的輸入是三個頂點的座標。可以使用海龍公式來計算三角形面積。海龍公式的步驟如下:

  1. 計算三角形的三邊長度:ab, bc, ac。
  2. 計算半周長 s = (ab + bc + ac) / 2。
  3. 使用海龍公式計算面積:Area = sqrt(s * (s - ab) * (s - bc) * (s - ac)) * 2。

程式碼中直接使用 sqrt 函數計算距離和面積,並使用 printf("%.0f", ...) 將結果四捨五入到整數。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
#include <math.h>
inline int read(){
	int a(0);
	char c('0');
	while(c>='0'){
		a=(a<<3)+(a<<1)+c-'0';
		c=getchar_unlocked();
	}
	return a;
}
int main(){
	char a=read(),b=read(),c=read(),d=read(),e=read(),f=read();
	float ab=sqrt((a-c)*(a-c)+(b-d)*(b-d)),bc=sqrt((a-e)*(a-e)+(b-f)*(b-f)),ac=sqrt((e-c)*(e-c)+(f-d)*(f-d)),abc=(ab+bc+ac)/2;
	printf("%.0f",sqrt(abc*(abc-ac)*(abc-ab)*(abc-bc))*2);
}

Discussion