牛客小白月赛42 C 寒潭烟光

寒潭烟光

https://ac.nowcoder.com/acm/contest/11219/C

应该是前五题中最难的吧。

这个数据范围很大,我们必须使用单次操作 O(1)O(1) 的方法。

由于数列构成不唯一,我们可以构造数列 a=0,0,0,,n×F(x)a={0, 0, 0, ……,n×F(x)},放置 n1n-100 ,满足条件。

然后我们计算加入 x0x_0 后的数列的 F(a)F(a) 值。

序列 a=x0,0,0,0,,n×F(x)a′={x_0,0,0,0,……,n×F(x)},于是前缀和数组的总和为:

(n+1)×x0+n×fx(n + 1) × x_0 + n × fx

因为要取平均值,所以我们除以 n+1n+1

但是呢这么写好像会爆,我们变形一下式子。

答案相当于:(n+1)×x0+n×fxn+1=(n+1)×x0+(n+1)×fxfxn+1=x0fxfxn+1\frac{(n + 1) × x_0 + n × fx}{n+1}=\frac{(n + 1) × x_0 + (n+1) × fx-fx}{n+1}=x_0-fx-\frac{fx}{n+1}

这样就没事了。

代码。

全部评论
算法学的不行高中数学还好的表示直接分母加1,分子在nf的基础上加上x0和n*x0就好了,因为后面的前缀和每一项都大x0
点赞
送花
回复
分享
发布于 2021-12-17 21:50
为什么直接((n+1)x0+n*Fx)/(n+1)不行啊QWQ
点赞
送花
回复
分享
发布于 2021-12-17 23:20
蔚来
校招火热招聘中
官网直投

相关推荐

OPSL:钱确实给的多,但是追责这一点比较迷惑…3个月具体如何计算呢?出勤天数30*3吗?还是21*3呢?万一中间学校有安排怎么办呢?这个得多问一问呀
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务