ABC104-D:We Love ABC(400)
問題
https://beta.atcoder.jp/contests/abc104/tasks/abc104_d
長さ の文字列
が与えられる。
のうち
つ文字を選んだときに左から
となっている組み合わせの数を求めよ。
制約
考え方
場合の数である。文字を つ選ぶときに真ん中の
を固定して数え上げることにすると、求める場合の数は以下の
通りである。
と選ぶ場合
と選ぶ場合
と選ぶ場合
と選ぶ場合
事前にある位置 k における
よりも左にある
の個数
よりも左にある
の個数
よりも右にある
の個数
よりも右にある
の個数
を求めておく。
と選ぶ場合
この場合はを基準に右に何個
があるか、左に何個
があるか数えればいい。その場合に文字列の
に関しては任意の文字
にすることができるので
が
個ある場合は
通りの組み合わせになる。よってそれぞれ掛け合わせればよいので、
通り
となる。パターン (2), (3), (4) の場合も同様の考え方で求めることができる。と選ぶ場合
通り
と選ぶ場合
通り
と選ぶ場合
通り
文字が or
なる位置
について
を足し合わせれば良い。
別解(DP)
i 文字目までで作成することの文字列 ('a', 'ab', 'abc', パターン数)の個数を数え上げることで、文字列を前から順番に参照して個数を確定することができる。i 文字目でできる文字列の個数は i-1 文字目の文字列の個数によって一意に決まるためである。
詳細は以下のブログを参照されたい。
ABC104 参加記録 - ARMERIA
ポイント
- 何に着目して数え上げるか
- 3点選択は真ん中に着目
- 範囲の個数は累積和
類題
雑記
本番は C に 1 時間くらいをかけてしまい、考察の時間をとることができなかった。Bに着目して数え上げるところまではわかったが、4 つのパターンの場合分けが不十分であった。