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. Đặt s0=seed. Với i=1,2,3,…: si=(1103515245⋅si−1+12345)mod231. Số ngẫu nhiên thứ i là ui=si/231∈[0,1). Dãy u1,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 R (số nguyên dương) và số điểm cần sinh N. Với i=1,…,N, lấy hai số ngẫu nhiên kế tiếp u2i−1,u2i để tạo điểm (xi,yi)=(u2i−1⋅R, u2i⋅R) — điểm ngẫu nhiên đều trong hình vuông [0,R]×[0,R]. Đếm số điểm k thỏa xi2+yi2≤R2 (nằm trong một phần tư hình tròn tâm gốc tọa độ, bán kính R).
Vì diện tích một phần tư hình tròn chiếm tỉ lệ π/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 R là A^=4R2⋅Nk (quy ước A^=0 nếu N=0).
In ra k và A^ (làm tròn 6 chữ số thập phân).
Ví dụ: với N=3, R=2, seed=1, kết quả là 3 16.000000.
Một dòng gồm 3 số nguyên N R seed cách nhau bởi khoảng trắng (0≤N≤200000; 1≤R≤1000; 0≤seed<231).
Một dòng gồm k (số nguyên) và A^ (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...