题目名称 1921. [CF 335E]数摩天楼
输入输出 countingskyscrapers.in/out
难度等级 ★★☆
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarcstdio 于2015-03-26加入
开放分组 全部用户
提交状态
分类标签
数学 概率与期望
分享题解
通过:1, 提交:7, 通过率:14.29%
Gravatar梦那边的美好ET 100 0.081 s 3.16 MiB C++
Gravatar梦那边的美好ET 90 0.076 s 3.16 MiB C++
Gravatar梦那边的美好ET 90 0.120 s 3.16 MiB C++
Gravatarcstdio 90 0.125 s 3.16 MiB C++
Gravatar梦那边的美好ET 60 0.100 s 3.16 MiB C++
Gravatar梦那边的美好ET 0 0.003 s 3.16 MiB C++
Gravatar梦那边的美好ET 0 0.121 s 3.16 MiB C++
关于 数摩天楼 的近10条评论(全部评论)
也是醉了……这数学证明都能拿去当数学联赛大题了……
题解(其实是翻译的):http://blog.csdn.net/wmdcstdio/article/details/44646631
Gravatarcstdio
2015-03-26 11:50 1楼

1921. [CF 335E]数摩天楼

★★☆   输入文件:countingskyscrapers.in   输出文件:countingskyscrapers.out   简单对比
时间限制:2 s   内存限制:256 MiB

【题目描述】

一些摩天大楼被沿着直线修建。摩天大楼的数量是2到314!(314的阶乘,一个很大的数)之间的一个随机整数。每栋大楼的高度独立地随机选取,对任意正整数i,有2^(-i)的概率高度为i。高度为i的大楼的楼层从0到i-1编号。

为了加快运输速度,在大楼之间安装了一些溜索。特别地,在某栋楼的i层和另一栋楼的i层之间有一条溜索,当且仅当这两栋楼之间没有一栋有i层的大楼。

Alice和Bob决定数一数摩天大楼的数量。

Alice十分细心,她想知道到底有多少栋摩天楼。她从最左侧的摩天大楼开始,计数器为1.然后她向右移动,每次移到下一栋大楼,并将计数器加1.她持续移动,直到到达最右侧的摩天楼。

Bob非常没耐心,他希望尽快结束。他从最左侧的摩天大楼开始,计数器为1.他使用溜索在大楼之间一栋。每次Bob都用最高的溜索向右移动,但由于恐高,他会忽略掉那些编号超过h的楼层。Bob用溜索旅行得如此之快,以至于他根本没法数清经过了多少大楼。因此他只是将计数器加上2^i,其中i是他当前所在的楼层编号。他持续移动,直到到达最右侧的摩天楼。

考虑如下例子。有6栋大楼,从左到右的高度分别是1,4,3,4,1,2,且h=2。Alice开始时计数器为1,并且将计数器加了五次1,得到的结果是6.Bob开始时计数器为1,然后他依次加上1,4,4,2,最终得到12.注意,Bob出于恐高忽略掉了最高的溜索。

Bob的计数器在图片顶部,Alice的计数器在图片底部。所有溜索都已画出。Bob的路径是绿色虚线,Alice的路径是粉色虚线。所有楼层都被标号,Bob经过的溜索旁写出了Bob向计数器上加的数。

当Alice和Bob到达最右端的摩天楼时,他们将各自的计数器拿出来比较。给出Alice或者Bob的计数器的值,你需要计算出另外一个人的计数器的期望值。

【输入格式】

第一行一个名字,是字符串"Alice"或"Bob"。第二行包含两个整数n和h(2<=n<=30000,0<=h<=30)。

如果名字是"Alice",n就代表Alice到达最右端摩天楼时,她的计数器的值。否则n就代表Bob到达最右端摩天楼时计数器的值。h代表Bob愿意到达的最高楼层。

【输出格式】

一行一个实数,即另一个人计数器的期望值。

保留到小数点后九位。

【样例输入输出】

Input
Alice
3 1
Output
3.500000000
Input
Bob
2 30
Output
2
Input
Alice
2572 10
Output
3439.031415943

【来源】

CODEFORCES 335E