#P6969. [NEERC 2016] Foreign Postcards

[NEERC 2016] Foreign Postcards

Description

费多是个热心的旅行者。由于他的爱好,他收集了来自世界各地的大量明信片。每张明信片正面都有一张独特的图片,背面有一些地址信息和文本字段。

在费多家的一次聚会上,他决定向客人展示他所有的明信片。为了实现这一目标,他想把它们全部摆在桌面上。起初,他所有的明信片都被安排在一个单叠里,费多拿在手里。不幸的是,这堆明信片中的一些可能会被错误地翻过来——颠倒过来。理想情况下,费多希望桌上的所有明信片都放在图片的上方,但查看每张明信片并逐个翻转可能非常耗时。相反,他提出了以下过程:

nn 是他手中的那堆明信片的剩余数量。费多均匀地选择一个介于1和 nn 之间的随机数 kk ,并从堆栈中取出前 kk 张明信片。

他看了看这 kk 张明信片中最上面的一张明信片。如果方向错误,他会将整叠明信片倒置在一起。

然后,他把这 kk 张明信片放在桌子上,不再旋转。

如果他手里还有一些明信片,费多会返回到步骤 11

当然,在所有的明信片都放在桌子上之后,可能仍然有一些明信片是倒着放的。这类明信片的预期数量是多少?

Input Format

输入由一行 CCWW 字符组成——第 ii 个字符对应于栈中的第 ii 个明信片,从栈顶部开始计数。CC 表示第 ii 张明信片在初始栈中的方向正确, WW 表示第 ii 张明信片的方向错误。字符数在 1110610^{6} 之间, 66 包括在内。

Output Format

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

CWCC

1.0

WWCWCCW

2.333333333333

Hint

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