題目鏈結
題意:有乙個長度為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^2
n2的,但是狀態就是n
2n^2
n2級別的,所以沒什麼優化的空間。所以我們考慮直接把期望帶進去計算。我們考慮從i−1
i-1i−
1位置到i
ii這個位置答案期望增加多少。我們設原來的期望連續1
11的長度是x
xx,現在可能變成x+1
x+1x+
1。我們化一下式子可以知道,(x+
1)3−
x3=3
x2+3
x+
1(x+1)^3-x^3=3x^2+3x+1
(x+1)3
−x3=
3x2+
3x+1
,這是權值,再乘上這個位置是1
11的概率,就是期望增加的值。
根據期望的線性性,我們可以把3x2
+3x+
13x^2+3x+1
3x2+3x
+1拆成三個部分,1
11是常數不用管,那麼我們就分別維護出這裡x
xx的期望值和x
2x^2
x2的期望值,就可以算從i−1
i-1i−
1到ii
i的答案增加量了。而這兩個量也很好維護。x
2x^2
x2的期望增加值就用(x+
1)2−
x2
(x+1)^2-x^2
(x+1)2
−x2乘上i
ii是1
11的概率就好了,x
xx的期望增加量直接就是1∗i
1*i1∗
i位置上是1
11的概率。但是注意一下我們更新i
ii處的答案用的是i−1
i-1i−
1處的x
xx與x
2x^2
x2的增加量,因為是之前已有的期望。
這樣就做完了,時間複雜度o(n
)o(n)
o(n)
。**很簡單。
**:
#include
using
namespace std;
int n;
double x[
100010
],y[
100010
],dp[
100010
],a[
100010];
intmain()
printf
("%.1lf\n"
,dp[n]);
return0;
}
洛谷1654 OSU (期望)
點此看題面 立方的期望顯然不等於期望的立方,這種東西自己舉幾個例子就知道了。考慮我們維護到第 i 個位置為止的答案為 ans i 連續長度期望為 a i 連續長度平方期望為 b i 連續長度立方期望為 c i 一次期望的長度轉移是顯然的 a i a i a 1 對於二次期望,考慮 x 1 2 x 2...
洛谷p4318 完全平方數
小 x 自幼就很喜歡數。但奇怪的是,他十分討厭完全平方數。他覺得這些數看起來很令人難受。由此,他也討厭所有是完全平方數的正整數倍的數。然而這絲毫不影響他對其他數的熱愛。這天是小x的生日,小 w 想送乙個數給他作為生日禮物。當然他不能送乙個小x討厭的數。他列出了所有小x不討厭的數,然後選取了第 k個數...
洛谷P4318 完全平方數
求自然數中,第 k 個不含平方因子的數 這道題的做法還挺多的 打表,二分,反演.我用的做法是二分 容斥 顯然答案滿足二分性,假設當前檢驗的數為 n 沒有平方因子的數 所有數 乙個質數平方的因子的倍數 兩個質數乘積平方的倍數 三個的.對於乙個數 i 2 可以發現 mu i 就是 i 2 在上面那個式子...