在 a×b 的矩形中隨機取點 (x,y),求 x*y < S 的概率。輸出百分比,保留 6 位小數。
曲線 x*y = S 是雙曲線。矩形面積 M = a*b。
若 S ≥ M,概率 = 0;若 S = 0,概率 = 1。
對於 0 < S < M,滿足 x*y ≥ S 的區域面積為:
∫S/ba (S/x) dx = S * ln(a / (S/b)) = S * ln(ab/S) = S * ln(M/S)
加上 x ∈ [0, S/b] 時 y 恆 ≥ S/b 矩形面積 S。
所以 x*y ≥ S 的總面積 = S + S*ln(M/S)。
目標面積 = M - S - S*ln(M/S)。
概率 = (M - S - S*ln(M/S)) / M。
#include
#include
int main() {
int T; scanf("%d", &T);
while (T--) {
double a, b, S;
scanf("%lf%lf%lf", &a, &b, &S);
double M = a * b;
double ans;
if (S >= M) ans = 0.0;
else if (S == 0) ans = 1.0;
else ans = (M - S - S * log(M / S)) / M;
printf("%.6lf%%\n", ans * 100);
}
return 0;
}