首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

UVA 11346 Probability:幾何概率計算矩形面積超過閾值的機率

     編輯:C++ 入門

問題描述

在矩形區域 x ∈ [-a, a], y ∈ [-b, b] 中均勻隨機取點 (X,Y)。求由原點和 (X,Y) 為對角頂點的矩形面積 |X·Y| 超過 S 的概率。輸出百分比保留 6 位小數。

幾何轉換

面積條件 |X·Y| > S。利用對稱性,只考慮第一象限 x>0, y>0,面積為 xy > S。總面積 4ab,第一象限面積 ab。
曲線 y = S/x 在 x ∈ [S/b, a] 內(因 y≤b ⇒ x≥S/b)。第一象限滿足條件面積:

∫_{S/b}^{a} (b - S/x) dx = b(a - S/b) - S(ln a - ln(S/b))
= ab - S - S ln(ab/S)

四個象限總滿足面積 = 4 × (ab - S - S ln(ab/S))。
概率 = 滿足面積 / 總面積 = 1 - (S + S ln(ab/S)) / (ab)。

邊界情況

  • ab ≤ S:最大面積不超過 S,概率 0。
  • S = 0:概率 1(100%)。

代碼實現

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T; cin >> T;
    while (T--) {
        double a, b, S; cin >> a >> b >> S;
        if (a*b <= S) { cout << "0.000000%\n"; continue; }
        if (S == 0) { cout << "100.000000%\n"; continue; }
        double prob = 1.0 - (S + S * log(a*b/S)) / (a*b);
        cout << fixed << setprecision(6) << prob*100 << "%\n";
    }
    return 0;
}

關鍵點

  1. 對稱性化簡:只算第一象限再乘 4。
  2. 定積分計算:∫ b - S/x dx = bx - S ln x。
  3. 對數參數:log(a*b/S) = log a + log b - log S,避免中間溢出(double 通常足夠)。
  4. 輸出格式:百分比 + % 符號,setprecision(6)。

複雜度

  • O(1) 每測試用例,極快。

本題是連續型幾何概率的標準練習:利用對稱性降維、定積分計算曲線下面積、邊界條件特判,代碼極其簡潔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved