# Geometry# Math# Floating-point

b004 - 繩子上吃草的牛

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一頭牛被繩子繫在兩根柱子之間,要求計算牛可以吃到的草地面積。給定柱子間的距離 D 和繩子的長度 L,需要計算以繩子為周長的橢圓面積。

解題思路

這題的核心是將問題轉化為計算橢圓面積。繩子的長度 L 作為橢圓的周長,柱子間的距離 D 作為橢圓的短軸長度。由於橢圓周長公式較複雜,且題目給定了 pi = 2 * acos(0),因此可以利用橢圓面積公式:面積 = pi * 半長軸長 * 半短軸長。

半短軸長度為 D/2。半長軸長度可以通過繩子長度 L 和半短軸長度 D/2 計算得出。由於繩子總長度為 L,因此 2 * pi * sqrt((a^2 - (D/2)^2)) = L,其中 a 為半長軸長度。解此方程可得 a = sqrt((L/2/pi)^2 + (D/2)^2)。

程式碼直接利用給定的 pi 值和公式計算面積,並輸出結果。

複雜度分析

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

程式碼

#include<stdio.h>
#include<cmath>
int main (){
float D,L;
while(scanf("%f%f",&D,&L)>0)
	printf("%.3f\n",acos(0)*(L/2.0)*sqrt((L+D)*(L-D)));
}

Discussion