傳送門
題解:非常簡單。
第i+1道題作對的概率,是
1)第i道題選擇了1~a(i+1)中的乙個選項,並且作對了i+1題。
2)若ai>a(i+1) 第i道題選擇了a(i+1)+1~ai中的乙個選項並做對了i+1題。顯然這部分概率為0。
如果ai>a(i+1),那麼「第i道題選擇了1~a(i+1)中的乙個選項」的概率是ai/a(i+1)。
否則ai<=a(i+1),「第i道題選擇了1~a(i+1)中的乙個選項」的概率就是1.
綜合起來就是min(ai,a(i+1))/ai。
在「第i道題選擇了1~a(i+1)中的乙個選項」的前提下,作對i+1題的概率為1/(a(i+1))。
那麼根據貝葉斯公式,p(作對i+1題)=p(第i道題選擇了1~a(i+1)中的乙個選項)*p(在第i道題選擇了1~a(i+1)中的乙個選項的前提下作對第i+1題)
因此p(i+1)=min(ai,a(i+1))/ai*1/a(i+1)=min(ai,a(i+1))/(ai*a(i+1))
經過化簡p(i+1)=1/max(ai,a(i+1))。
所以o(n)掃一遍即可。
//bzoj 2134
#include#include#include#include#define lint long long
#define mod 100000001
#define maxn 10000010
using namespace std;
int a[maxn];
double ans;
int main()
BZOJ2134 單選錯位
給出n道題目,每道題目有a i 個選項 有乙個人知道所有題目的正確選項,但是他把答案全部寫在了第i 1的題目上 第n個題目的答案寫在了第1個題目上 求出這個人做對題目的期望 期望dp,有一點點水 首先對於a i 1 和a i 而言,假設要答對第i道題的話,那麼概率就是min a i 1 a i a ...
BZOJ 2134 單選錯位 期望
第i個填到第i 1個的期望得分顯然是1 max a i a i 1 根據期望的線性性,我們只需將每個選項的期望值累加即可.include using namespace std typedef long long ll const int maxn 10000009 int a maxn int m...
bzoj2134 單選錯位 期望
題目描述 輸入n很大,為了避免讀入耗時太多,輸入檔案只有5個整數引數n,a,b,c,a1,由上交的程式產生數列a。下面給出pascal c c 的讀入語句和產生序列的語句 預設從標準輸入讀入 for pascal readln n,a,b,c,q 1 for i 2 to n do q i int6...