ABC469 C - Cantrip

魔法の呪文

考え方

手作業でシミュレーションしてみると何が起こるかすぐにわかる。

どれだけ当たりを引いても、手元にある袋の個数は変わらない(不変量)。
つまり、最初に $k$ 個袋を持っているなら、'x' を $k$ 個手にしたところで手元に当たりがなくなって終了。

よって、最初に $k$ 個袋を持っている場合は、前から $k$ 番目の 'x' がある位置が答え。
'x' が $k$ 個ない場合は答えは $n$。

文字列を前から見ていって、'x' の位置を配列に記録していき、長さが足りない分を $n$ で埋めればよい。

計算量は $O(N)$ である。

入力例1での動作

入力を受け取る。

n: 5
s: "oxoxo"

x は左から $2$ 文字目と $4$ 文字目にある。

最初に持つ袋の個数 $k$ ごとの答えは次のようになる。

$k$ 前から $k$ 番目の x 答え
$1$ $2$ 文字目 $2$
$2$ $4$ 文字目 $4$
$3$ 存在しない $5$
$4$ 存在しない $5$
$5$ 存在しない $5$

したがって、出力する列は 2 4 5 5 5 となる。

注意点

問題文中の位置は 1-indexed だが、文字列 s の添字は 0-indexed である。
コード中で両者が入り混じるので、丁寧に確認しながら書く。

別解

特になし。