其他分享
首页 > 其他分享> > Luogu1654 OSU! 题解

Luogu1654 OSU! 题解

作者:互联网

题目传送门

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

\[(x+1)^3=x^3+3x^2+3x+1 \]

由于原先得分为 \(x^3\) ,可知每次 \(+1\) 都会增加 \(3x^2+3x+1\) 分

在代码实现过程中,用 \(x\) 维护一维 \(x\) ,\(y\) 维护二维 \(x^2\) ,就很容易实现了。

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;
}

标签:3x,int,题解,OSU,double,Luogu1654,ri,define
来源: https://www.cnblogs.com/BFcnblogs/p/15017595.html