博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 6568 Math
阅读量:5337 次
发布时间:2019-06-15

本文共 1267 字,大约阅读时间需要 4 分钟。

\(f_i\)为从\(i\)\(i+1\)的期望步数。
\(f_i = 1-p + p(f_i + 2((1-q)^{n-i}(n-i) + q\sum_{j=0}^{n-i-1}(1-q)^{j}j))\)
移项相减得:
\(f_i = 1+\frac{2p((1-q)^{n-i}(n-i) + q\sum_{j=0}^{n-i-1}(1-q)^{j}j)}{1-p}\)
然后预处理一个前缀和就可以了。
代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define y1 y11#define fi first#define se second#define pi acos(-1.0)#define LL long long//#define mp make_pair#define pb emplace_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pli pair
#define pii pair
#define piii pair
#define pdd pair
#define mem(a, b) memset(a, b, sizeof(a))#define debug(x) cerr << #x << " = " << x << "\n";#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//headconst int N = 1e5 + 10;int n;double p, q, _q[N], sum[N];int main() { while(~scanf("%d %lf %lf", &n, &p, &q)) { sum[0] = 0; _q[0] = 1; for (int i = 1; i <= n; ++i) { _q[i] = _q[i-1]*(1-q); sum[i] = sum[i-1] + _q[i]*i; } double ans = 0; for (int i = 0; i < n; ++i) { ans += 1+(2*p*(_q[n-i]*(n-i)+q*sum[n-i-1]))/(1-p); } printf("%.10f\n", ans); } return 0;}

转载于:https://www.cnblogs.com/widsom/p/11224002.html

你可能感兴趣的文章
python基本数据类型
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
第1章2节《MonkeyRunner源码剖析》概述:边界(原创)
查看>>
JVM相关面试
查看>>
webpack 中版本兼容性问题错误总结
查看>>
python装饰器@property
查看>>
oracle 删除死锁
查看>>
python字符串与文本操作(一)
查看>>
table和div的比较(转)
查看>>
1.几大开发模型区别与联系
查看>>
[原]使用 Microsoft Expression 编写 网页 (javascript) 非常棒
查看>>
intellij Idea 报jdk错误
查看>>
ajax入门(复习)
查看>>
LeetCode:154. 寻找旋转排序数组中的最小值 II
查看>>
magento 安装
查看>>