osu 是一款群眾喜聞樂見的休閒軟體。
我們可以把osu的規則簡化與改編成以下的樣子:
一共有\(n\)次操作,每次操作只有成功與失敗之分,成功對應\(1\),失敗對應\(0\),\(n\)次操作對應為\(1\)個長度為\(n\)的\(01\)串。在這個串中連續的 \(x\) 個 \(1\) 可以貢獻 \(x^3\) 的分數,這\(x\)個\(1\)不能被其他連續的\(1\)所包含(也就是極長的一串\(1\),具體見樣例解釋)
現在給出\(n\),以及每個操作的成功率,請你輸出期望分數,輸出四捨五入後保留1位小數。
第一行有乙個正整數\(n\),表示操作個數。接下去\(n\)行每行有乙個\([0,1]\)之間的實數,表示每個操作的成功率。
只有乙個實數,表示答案。答案四捨五入後保留1位小數。
其實有乙個卷積的想法,注意到如果普通的\(f_\)轉移的話發現\(1\)的轉移是\(1^3,2^3,\dots\)什麼的和\(\prod p\)什麼的錯位的在弄,但是我猜會爆精度。
事實上這個題在求連續1長度的三次方的期望,考慮先求出連續1長度1次方和2次方的期望,然後遞推過來
設\(a_i\)代表前\(i\)位第\(i\)位為\(1\)的長度的期望
\[a_i=p_i(a_+1)
\]即在末尾長度+1,成功的概率是\(p_i\)
然後\(b_i\)代表前\(i\)位第\(i\)位為\(1\)的長度的平方的期望
\[b_i=p_i(b_+2a_+1)
\]因為期望是線性的,所以可以直接按式子\(x^2->x^2+2x+1\)延伸貢獻
形象點理解,其實這個兩個式子求的都是\(00\dots00111\dots11\)這樣的東西的期望。
然後延伸到立方其實是差不多的,但是為了統計答案需要稍微變形一下,\(ans_i\)代表前\(i\)位的答案
\[ans_i=(ans_+3b_+3a_+1)p_i+ans_(1-p_i)
\]\(ans_=c_+oth_\),事實上第乙個式子應該這麼拆開看,前面\(c_\)是末尾極長\(1\)的答案,通過期望線性的方法和上面一樣進行累加,\(oth_\)的第\(i-1\)位是\(0\),但它一樣需要乘一下概率,後面的就是延長失敗累加答案了。
化簡一下式子就成了
\[ans_i=ans_+(3b_+3a_+1)p_i
\]code:
#include const int n=1e5+10;
double a[n],b[n],c[n];
int main()
printf("%.1lf\n",c[n]);
return 0;
}
2019.1.13 洛谷1654 OSU (期望)
點此看題面 立方的期望顯然不等於期望的立方,這種東西自己舉幾個例子就知道了。考慮我們維護到第 i 個位置為止的答案為 ans i 連續長度期望為 a i 連續長度平方期望為 b i 連續長度立方期望為 c i 一次期望的長度轉移是顯然的 a i a i a 1 對於二次期望,考慮 x 1 2 x 2...
洛谷1654 BZOJ4318 OSU 期望
題目鏈結 題意 有乙個長度為n nn的序列,每個數字都是0 00或1 11,告訴你每個數是1 11的概率。其中長度為x xx的連續的一段1 11對答案的貢獻是x 3x 3 x3,求答案的期望。n 1 e5 n 1e5 n 1 e5,四捨五入保留一位小數。題解 我們考慮乙個dp。最簡單的dp是n 2n...
洛谷P3372解題報告
題目描述如下 在這裡插入描述 由於是一道模板題就直接給注釋詳細的 include includeusing namespace std typedef long long ll long long int sum 0ll struct node tree 500005 void build ll l...