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: Xét bước ngẫu nhiên (random walk) 1 chiều bắt đầu tại vị trí 0: ở mỗi bước, vị trí tăng +1 với xác suất p/q và giảm −1 với xác suất 1−p/q (0<p<q≤1000, p,q nguyên).
Mô phỏng M phép thử độc lập, mỗi phép thử gồm T bước. Các số ngẫu nhiên được lấy TUẦN TỰ theo đúng thứ tự toàn cục: phép thử 1 dùng lần lượt T số ngẫu nhiên đầu tiên (mỗi số cho một bước), rồi đến phép thử 2 dùng T số tiếp theo, v.v. Ở bước thứ t của một phép thử, lấy số ngẫu nhiên kế tiếp u: nếu u<p/q thì bước +1, ngược lại bước −1.
Với mỗi phép thử, kiểm tra xem vị trí có quay lại đúng 0 ít nhất một lần SAU khi đã đi ít nhất 1 bước hay không (không tính vị trí xuất phát ban đầu). Sau khi mô phỏng xong M phép thử, tính:
In 2 giá trị trên, mỗi giá trị làm tròn 6 chữ số thập phân, cách nhau khoảng trắng.
Ví dụ: M=3, T=4, p=1, q=2, seed=1 → 0.666667 1.333333.
Một dòng gồm 5 số nguyên M T p q seed (0≤M≤1000; 0≤T≤2000; 0<p<q≤1000; 0≤seed<231).
Hai số thực (mỗi số 6 chữ số thập phân), cách nhau khoảng trắng: xác suất quay lại 0, và vị trí trung bình cuối cùng.
Ví dụ:
Đầu vào:
1 0 1 2 1
Đầu ra:
0.000000 0.000000
Đầu vào:
0 10 1 2 1
Đầu ra:
0.000000 0.000000
Đang tải editor...