【ybt金牌导航1-1-4】【luogu P1654】期望分数 / OSU!

期望分数 / OSU!

题目链接:ybt金牌导航1-1-4 / luogu P1654

题目大意

一共有 n 次操作,每次操作只有成功与失败之分,成功对应 1,失败对应 0,n 次操作对应为 1 个长度为 n 的 01 串。在这个串中连续的 X 个 1 可以贡献 X^3 的分数。

现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

思路

这道题其实跟上一题很像,就只是概率变的更多,而且这次是 x 3 x^3 x3

那我们首先来看如何搞 x 3 x^3 x3 ( x + 1 ) 3 (x+1)^3 (x+1)3 差了多少。
( x + 1 ) 3 = ( x + 1 ) 2 × ( x + 1 ) = ( x 2 + 2 x + 1 ) × ( x + 1 ) = x 3 + 3 x 2 + 3 x + 1 (x+1)^3=(x+1)^2\times(x+1)=(x^2+2x+1)\times(x+1)=x^3+3x^2+3x+1 (x+1)3=(x+1)2×(x+1)=(x2+2x+1)×(x+1)=x3+3x2+3x+1
那就是多了 3 x 2 + 3 x + 1 3x^2+3x+1 3x2+3x+1

那我们就每次弄出 x x x x 2 x^2 x2,然后就可以根据这个得出答案了。
x 2 x^2 x2 每次加的就是 2 × x + 1 2\times x + 1 2×x+1

代码

#include<cstdio>

using namespace std;

int n;
double a[100001], ans, two[100001], one[100001];

int main() {
	scanf("%d", &n);
	
	for (int i = 1; i <= n; i++) {
		scanf("%lf", &a[i]);
		
		one[i] = (one[i - 1] + 1.0) * a[i];//得出新的x
		two[i] = (two[i - 1] + 2.0 * one[i - 1] + 1.0) * a[i];//得出新的x^2
		ans += (3.0 * two[i - 1] + 3.0 * one[i - 1] + 1.0) * a[i];//算增加的答案:3*x^2+3*x+1
	}
	
	printf("%.1lf", ans);
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值