经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
agc007C - Pushing Balls(期望 等差数列)
来源:cnblogs  作者:自为风月马前卒  时间:2018/9/26 18:01:05  对本文有异议

题意

题目链接

翻译来自神仙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)}$

不断推下去即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long double N, d1, x, ans;
  4. int main() {
  5. cin >> N >> d1 >> x;
  6. for(int i = N; i >= 1; i--) {
  7. long double s = d1 * 2 * N + N * (2 * N - 1) * x;
  8. ans += s / 2 / N;
  9. s = s - (4 * d1 + 4 * N * x - 2 * x) / 2 / N;
  10. d1 = ((2 * N - 2) * d1 + d1 + 2 * x + 3 * d1 + 3 * x) / 2 / N;
  11. N--;
  12. x = (s - 2 * N * d1) / N / (2 * N - 1);
  13. // if(i > 990) printf("%.10lf\n", (double)x);
  14. }
  15. printf("%.15lf", (double)ans);
  16. return 0;
  17. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号