Luogu1654 OSU! 题解

题目传送门

先设 x 为当前得分,当又得到 1 分时,有:

(x+1)3=x3+3x2+3x+1

由于原先得分为 x3 ,可知每次 +1 都会增加 3x2+3x+1

在代码实现过程中,用 x 维护一维 xy 维护二维 x2 ,就很容易实现了。

View code:

#include<bits/stdc++.h>
using namespace std;

#define ri register int
#define il inline

const int N=1e5+10;
int n;
double ans,x,y;
double v[N];
    
signed main(){
	scanf("%d",&n);
	for(ri i=1;i<=n;i++)
		scanf("%lf",&v[i]);
	for(ri i=1;i<=n;i++){
		ans=ans+(3*(x+y)+1)*v[i];//将 x 和 y 合并
		y=(y+2*x+1)*v[i];
		x=(x+1)*v[i];
	}
	printf("%.1lf",ans);
    return 0;
}
posted @   BFNewdawn  阅读(24)  评论(0)    收藏  举报
编辑推荐:
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
阅读排行:
· 一天 Star 破万的开源项目「GitHub 热点速览」
· 别再堆文档了,大模型时代知识库应该这样建
· 瞧瞧别人家的日期处理,那叫一个优雅!
· C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
· 使用TypeScript开发微信小程序(云开发)-入门篇
点击右上角即可分享
微信分享提示