题目链接:

http://poj.openjudge.cn/practice/1055/

题目意思:

给出的树最大节点个数为n的情况下,求树上点深度的期望。

解题思路:

数学期望公式的推导。

自己先画下nodes=1时 p[1]=1

nodes=2时,p[2]=0.5*1+0.5*2=3/2

nodes=3时,p[3]=11/6

nodes=4时,p[4]=50/24

nodes=5时,p[5]=274/120

.......其实p[n]就是调和级数h[n]=1+1/2+1/3+1/4+...1/n.啊。。。当时智商没看出来。。。。

正规推法:

记f[i]为第i个节点的深度期望,则放第i个节点时,前面的树的结构上有i-1个节点,第i个节点作为每个节点的儿子概率相同都为1/i-1.f[i]=1/(i-1)*(f[1]+1)+(i-1)*(f[2]+1)+...1/(i-1)*(f[i-1]+1)=1+1/(i-1)*sigma(f[k])(k从1到i-1);

记前i个节点的平均期望为E[i],则E[i]=sigma(f[k])/i(k从1到i).

则f[i]=E[i-1]+1. 则E[i]=(f[1]+f[2]+..+f[i-1])+f[i])/i=((i-1)*E[i-1]+E[i-1]+1)/i=E[i-1]+1/i; 所以E[i]=1+1/2+1/3+1/4+.....1/i.

则ans=sigma(E[k])/n(k从1到n)

可以推出ans=(n+1)/n*h[n]-1. //h[n]为调和级数

当n很小时,可以直接暴力。当n很大时,h[n]趋近与ln(n)+C C为欧拉常数(大概0.577216),可以暴力打出来。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 1100000 double h[Maxn]; int main()
{
int m=1000000;
h[1]=1; for(int i=2;i<=m;i++)
h[i]=h[i-1]+1.0/(i*1.0); double la=h[m]-log(m*1.0); //求出欧拉常数
//printf("%lf\n",la);
LL n;
// printf("%lf\n",13.0/9.0); while(~scanf("%lld",&n))
{
if(n<=m) //直接算
printf("%.8lf\n",(n+1.0)/(n*1.0)*h[n]-1.0);
else
{
double temp=log(n*1.0)+la; //用等价的极限近似值代替
printf("%.8lf\n",(n+1.0)/(n*1.0)*temp-1.0);
}
}
return 0;
}

期望-pku-oj-1055:Tree的更多相关文章

  1. PKU OJ 1002 487-3279

    PKU OJ 1002 487-3279 487-3279 Description Businesses like to have memorable telephone numbers. One w ...

  2. LeetCode OJ——Binary Tree Inorder Traversal

    http://oj.leetcode.com/problems/binary-tree-inorder-traversal/ 树的中序遍历,递归方法,和非递归方法. /** * Definition ...

  3. LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)

      思路: 主要判断左子树与右子树. 在判断左时,循环下去肯定会到达叶子结点中最左边的结点与最右边的结点比较. 到了这一步因为他们都没有左(右)子树了,所以得开始判断这两个结点的右(左)子树了. 当某 ...

  4. [LeetCode OJ] Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  5. 九度OJ 1055:数组逆置 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7324 解决:3429 题目描述: 输入一个字符串,长度小于等于200,然后将数组逆置输出. 输入: 测试数据有多组,每组输入一个字符串. ...

  6. LeedCode OJ --- Binary Tree Inorder Traversal

    点击打开题目链接 今天只是写了递归的版本,因为还没想好怎么用迭代来实现,可以写的过程中,有一点是有疑问的,虽然我的代码可以AC. 问题是:主调函数是可以使用子函数中返回的在子函数中定义的vector. ...

  7. csu oj 1811: Tree Intersection (启发式合并)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 给你一棵树,每个节点有一个颜色.问删除一条边形成两棵子树,两棵子树有多少种颜色是有 ...

  8. pku oj overhang叠加卡片求最少的卡片数

    这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...

  9. PKU OJ Exponentiation

    ExponentiationTime Limit: 500MS                      Memory Limit: 10000KTotal Submissions: 155886   ...

  10. BZOJ 4811 [Ynoi2017]由乃的OJ ——Link-Cut Tree

    直接维护按照顺序经过每一段,初始的1可以变成什么,初始为0可以变成什么. 然后答案就可以和起床困难综合征一样贪心处理了. 写起来并不好写. 发现交换左右子树之后答案会改变,GG 调了一天,最后还是T掉 ...

随机推荐

  1. poj 1753 Flip Game 枚举(bfs+状态压缩)

    题目:http://poj.org/problem?id=1753 因为粗心错了好多次……,尤其是把1<<15当成了65535: 参考博客:http://www.cnblogs.com/k ...

  2. ExtJs双ActionResult共用同一Js文件ID冲突解决方案

    项目使用MVC+ExtJs实现,权限控制是基于Controller下的ActionResult的,有一个页面因参数不同就需要新建两个ActionResult. 不要问我为何是基于页面级,而不是数据级, ...

  3. BZOJ3688: 折线统计

    题解: 令f[i][j][0/1]表示前i个数有j段,最后一段是下降/上升的方案数 很容易列出状态转移方程(已按x轴排序) f[i][j][0]=sigma(f[k][j][0]+f[k][j-1][ ...

  4. 自定义View 实现软键盘实现搜索

    1. xml文件中加入自定义 搜索view <com.etoury.etoury.ui.view.IconCenterEditText android:id="@+id/search_ ...

  5. OS.ENVIRON()详解

    OS.ENVIRON()详解

  6. Android开发优化宝典

    I. 网络相关 http头信息带Cache-Control域 确定缓存过期时间 防止重复请求 直接用IP直连,不用域名,策略性跟新本地IP列表. – DNS解析过程耗时在百毫秒左右,并且还有可能存在D ...

  7. js变量作用域

    for(var i =0;i<100;i++) { } alert(i);//100 if(true){ var i="91d"; } alert(i);//91d func ...

  8. UVA 10585 Center of symmetry

    题意:给出一个点集,问这个集合有没有中心点使点集对称,这个点可以是点集中的点也可以不是点集的点. 解法:一开始我枚举每两个点连线的中点……结果T了orz当时也不知道怎么想的…… 将点按横坐标排序,如果 ...

  9. Windbg源码调试

    Windbg提供比VS2008丰富很多的调试命令,尤其是调试多线程程序. 今天试着怎么使用源代码方式调试.为了说明调试命令,<C++标准库>一书里的例子做示范. // testcast.c ...

  10. ubuntu 11.10 (64bit) install opencv 2.4.8 and run in Qtcreator

    install gtk2+ sudo apt-get install libgtk2.0*sudo apt-get install cmake-qt-gui tar xzvf opencv-2.4.8 ...