P6969 [NEERC 2016] Foreign Postcards

题目描述

费多是个热心的旅行者。由于他的爱好,他收集了来自世界各地的大量明信片。每张明信片正面都有一张独特的图片,背面有一些地址信息和文本字段。 在费多家的一次聚会上,他决定向客人展示他所有的明信片。为了实现这一目标,他想把它们全部摆在桌面上。起初,他所有的明信片都被安排在一个单叠里,费多拿在手里。不幸的是,这堆明信片中的一些可能会被错误地翻过来——颠倒过来。理想情况下,费多希望桌上的所有明信片都放在图片的上方,但查看每张明信片并逐个翻转可能非常耗时。相反,他提出了以下过程: 让 $n$ 是他手中的那堆明信片的剩余数量。费多均匀地选择一个介于1和 $n$ 之间的随机数 $k$ ,并从堆栈中取出前 $k$ 张明信片。 他看了看这 $k$ 张明信片中最上面的一张明信片。如果方向错误,他会将整叠明信片倒置在一起。 然后,他把这 $k$ 张明信片放在桌子上,不再旋转。 如果他手里还有一些明信片,费多会返回到步骤 $1$ 。 当然,在所有的明信片都放在桌子上之后,可能仍然有一些明信片是倒着放的。这类明信片的预期数量是多少?

输入格式

输入由一行 $C$ 和 $W$ 字符组成——第 $i$ 个字符对应于栈中的第 $i$ 个明信片,从栈顶部开始计数。$C$ 表示第 $i$ 张明信片在初始栈中的方向正确, $W$ 表示第 $i$ 张明信片的方向错误。字符数在 $1$ 到 $10^{6}$ 之间, $6$ 包括在内。

输出格式

输出一个实数——表上错误放置的明信片的预期数量。绝对或相对误差不应超过 $10^{−9}$

说明/提示

时间限制:2s,内存限制:512 MB。