問題一覧 > 通常問題

No.2222 Respawn

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 小数誤差許容問題 絶対誤差または相対誤差が$10^{-5}$ 以下。ただし、ジャッジ側の都合で500桁未満にしてください
タグ : / 解いたユーザー数 28
作問者 : stoqstoq / テスター : ぷらぷら ShirotsumeShirotsume
7 ProblemId : 7759 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-02-14 16:32:34

問題文

$N$ 個のマスが一列に並んでいます。左から $i$ 番目のマスをマス $i$ と呼びます。

いくつかのマスには罠が仕掛けられており、マスの状態は長さ $N$ の文字列 $S$ で表されます。 $S_i$ はマス $i$ に対応し、'.' は罠がないことを、'#' は罠があることを表します。

stop くんは現在マス $1$ に立っていて、マス $N$ に行きたいです。
さらに stop くんは変数 $x$ (初期値は $1$)を持っており、$x$ に現在の居場所を「セーブ」することができます。

stop くんはマス $N$ にちょうど止まるまで、次の3種類の操作のいずれかを無作為に選び行うことを繰り返します。 ここで3種類の操作は等確率で、かつ毎回独立に選ばれるものとします。

  • 右方向に1マス進む。マス $N$ を超えた場合や '#' のマスにちょうど止まった場合はゲームオーバーとなり、マス $x$ に飛ばされる。
  • 右方向に2マス進む。マス $N$ を超えた場合や '#' のマスにちょうど止まった場合はゲームオーバーとなり、マス $x$ に飛ばされる。
  • セーブする。現在マス $i$ にいるとして、$x \leftarrow i$ と更新する。

このとき、操作を行う回数(3種類の合計)の期待値を求めてください。

本問題の制約下において、期待値は必ず定義されます。また、この制約下で解は $10^9$ を超えないことが証明できます。

入力

$N$
$S$

  • $N$ は整数
  • $2 \leq N \leq 2 \times 10^5$
  • $S$ は '.' と '#' のみから成る長さ $N$ の文字列
  • $S_1$ と $S_N$ は '.'
  • $S$ において '#' は2文字以上連続しない

出力

操作を行う回数(3種類の合計)の期待値を出力してください。

想定解答との絶対誤差または相対誤差が $10^{-5}$ 以下であれば正解とみなされます。

サンプル

サンプル1
入力
2
..
出力
3

このケースでは、1マス進むという操作が選ばれたら終了です。

期待値は $\displaystyle \sum_{k=1}^{\infty} k \left( \frac{2}{3} \right)^{k-1} \frac{1}{3} = 3$ です。

サンプル2
入力
4
..#.
出力
7.5

例えばマス $2$ でセーブしていた場合、マス $3$ に止まったりマス $4$ を超えたりした場合でも飛ばされるのはマス $2$ になります。

期待値は $\displaystyle \frac{15}{2} = 7.5$ です。

サンプル3
入力
10
.#...#..#.
出力
23.130836237

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。