Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Xác suất - Thống kê] Monte Carlo ước lượng diện tích hình tròn

    Phương pháp Monte Carlo ước lượng các đại lượng hình học/xác suất bằng lấy mẫu ngẫu nhiên. Để bài toán có đáp số xác định (không phụ thuộc bộ sinh ngẫu nhiên thật), ta dùng bộ sinh số giả ngẫu nhiên cố định sau.

    Bộ sinh số giả ngẫu nhiên (để kết quả tái lập được, không dùng random thật): Cho số nguyên seed ≥0\ge 0≥0. Đặt s0=seeds_0=\text{seed}s0​=seed. Với i=1,2,3,…i=1,2,3,\dotsi=1,2,3,…: si=(1103515245⋅si−1+12345) mod 231.s_i = (1103515245 \cdot s_{i-1} + 12345) \bmod 2^{31}.si​=(1103515245⋅si−1​+12345)mod231. Số ngẫu nhiên thứ iii là ui=si/231∈[0,1)u_i = s_i / 2^{31} \in [0,1)ui​=si​/231∈[0,1). Dãy u1,u2,u3,…u_1,u_2,u_3,\dotsu1​,u2​,u3​,… được lấy theo ĐÚNG thứ tự này, dùng tuần tự trong suốt quá trình mô phỏng.

    Bài toán: Cho bán kính RRR (số nguyên dương) và số điểm cần sinh NNN. Với i=1,…,Ni=1,\dots,Ni=1,…,N, lấy hai số ngẫu nhiên kế tiếp u2i−1,u2iu_{2i-1}, u_{2i}u2i−1​,u2i​ để tạo điểm (xi,yi)=(u2i−1⋅R, u2i⋅R)(x_i,y_i) = (u_{2i-1}\cdot R,\ u_{2i}\cdot R)(xi​,yi​)=(u2i−1​⋅R, u2i​⋅R) — điểm ngẫu nhiên đều trong hình vuông [0,R]×[0,R][0,R]\times[0,R][0,R]×[0,R]. Đếm số điểm kkk thỏa xi2+yi2≤R2x_i^2+y_i^2 \le R^2xi2​+yi2​≤R2 (nằm trong một phần tư hình tròn tâm gốc tọa độ, bán kính RRR).

    Vì diện tích một phần tư hình tròn chiếm tỉ lệ π/4\pi/4π/4 diện tích hình vuông, ước lượng diện tích của TOÀN BỘ hình tròn bán kính RRR là A^=4R2⋅kN\hat A = 4R^2 \cdot \dfrac{k}{N}A^=4R2⋅Nk​ (quy ước A^=0\hat A = 0A^=0 nếu N=0N=0N=0).

    In ra kkk và A^\hat AA^ (làm tròn 6 chữ số thập phân).

    Ví dụ: với N=3, R=2, seed=1N=3,\ R=2,\ \text{seed}=1N=3, R=2, seed=1, kết quả là 3 16.000000.

    • Định dạng đầu vào:

      Một dòng gồm 3 số nguyên N R seedN\ R\ \text{seed}N R seed cách nhau bởi khoảng trắng (0≤N≤2000000 \le N \le 2000000≤N≤200000; 1≤R≤10001 \le R \le 10001≤R≤1000; 0≤seed<2310 \le \text{seed} < 2^{31}0≤seed<231).

    • Định dạng đầu ra:

      Một dòng gồm kkk (số nguyên) và A^\hat AA^ (số thực, đúng 6 chữ số thập phân), cách nhau bởi một khoảng trắng.

    Ví dụ:

    Đầu vào:

    1 1 1

    Đầu ra:

    1 4.000000
    

    Đầu vào:

    0 5 42

    Đầu ra:

    0 0.000000
    

    Đang tải editor...