codeforces 235B
题意:
给
出
一
段
长
为
n
的
字
符
串
,
只
含
‘
O
’
和
‘
X
’
,
第
i
个
位
置
出
现
‘
O
’
的
概
率
为
p
i
。
给出一段长为n的字符串,只含‘O’和‘X’,第i个位置出现‘O’的概率为p_i。
给出一段长为n的字符串,只含‘O’和‘X’,第i个位置出现‘O’的概率为pi。
若
字
符
串
中
出
现
连
续
k
个
‘
O
’
,
则
得
分
加
上
k
2
。
若字符串中出现连续k个‘O’,则得分加上k^2。
若字符串中出现连续k个‘O’,则得分加上k2。
问
最
终
得
分
的
期
望
。
问最终得分的期望。
问最终得分的期望。
题解:
d
p
[
i
]
表
示
前
i
个
字
符
得
分
的
期
望
。
dp[i]表示前i个字符得分的期望。
dp[i]表示前i个字符得分的期望。
引
入
排
列
组
合
恒
等
式
2
C
n
2
+
n
=
n
2
,
转
化
记
分
方
式
引入排列组合恒等式2C_n^2+n=n^2,转化记分方式
引入排列组合恒等式2Cn2+n=n2,转化记分方式。
- d p [ i ] = ( d p [ i − 1 ] + p [ i − 1 ] ) ∗ p [ i ] dp[i]=(dp[i-1]+p[i-1])*p[i] dp[i]=(dp[i−1]+p[i−1])∗p[i]
- a n s = ∑ i = 1 n p [ i ] + ∑ i = 2 n d p [ i ] ∗ 2 ans=\displaystyle\sum_{i=1}^{n} p[i]+\displaystyle\sum_{i=2}^{n} dp[i]*2 ans=i=1∑np[i]+i=2∑ndp[i]∗2
#include <bits\stdc++.h>
using namespace std;
const int N = 100001;
double p[N];
double dp[N];
int main() {
int n;
cin >> n;
double ans = 0;
for(int i = 1 ; i <= n ; i++){
cin >> p[i];
ans += p[i];
}
for(int i = 2 ; i <= n ; i++){
dp[i] = (dp[i-1]+p[i-1])*p[i];
ans += dp[i]*2;
}
cout << setiosflags(ios::fixed) << setprecision(15) << ans << endl;
return 0;
}