前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >agc007C - Pushing Balls(期望 等差数列)

agc007C - Pushing Balls(期望 等差数列)

作者头像
attack
发布2018-09-30 09:57:53
4330
发布2018-09-30 09:57:53
举报

题意

题目链接

翻译来自神仙yyb

Sol

又是一道神仙题。。

我开始的思路是枚举空位,但是还是不能做,GG

标算过于神仙,其中一些细节我也理解不了

题目给出的实际是一个首项为$d$,公差为$x$的等差数列

$sum = 2dn + \frac{2n(2n - 1)x}{2}$

此时的期望为$\frac{sum}{2n}$

考虑修改之后会有那些值发生改变

$d' = \frac{(2n - 2)d + d + 2x + 3d + 3x)}{2n}$(考虑第一个位置怎么变)

$sum' = \frac{d + (d + x) + (2n - 2)x + d + (2n - 1) x + d}{2n}$

$x' = \frac{sum -2nd}{n(2n - 1)}$

不断推下去即可

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
long double N, d1, x, ans;
int main() {
    cin >> N >> d1 >> x;
    for(int i = N; i >= 1; i--) {
        long double s = d1 * 2 * N + N * (2 * N - 1) * x;
        ans += s / 2 / N;
        s = s - (4 * d1 + 4 * N * x - 2 * x)  / 2 / N;
        d1 = ((2 * N - 2) * d1 + d1 + 2 * x + 3 * d1 + 3 * x) / 2 / N;
        N--;
        x = (s - 2 * N * d1) / N / (2 * N - 1);
    //    if(i > 990) printf("%.10lf\n", (double)x);
    }
    printf("%.15lf", (double)ans);
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • Sol
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档