いろはちゃんコンテスト Day2: E - 連呼
問題
A
B
のみからなる文字列であって、以下をすべて満たすもの数を数えよ:
A
をちょうど $N$ 文字含むB
をちょうど $M$ 文字含む- 先頭の文字は
A
- 末尾の文字は
B
- 部分文字列として
AAA
を含む
解説
初手で補集合をとる。
$M$ 個の B
の隙間に合計で $N$ 個の A
を挿入し、かつそれぞれの隙間に入る A
は $0 \sim 2$ 個であるようなものを数えればよい。
B
の隙間に ` ` A
AA
がそれぞれ何回出現するかの組は自由度 $1$ なので $O(N)$ 個しかなく、これらを固定すれば後は組合せ ${} _ n C _ r$ の式で $O(1)$ で求まる。
計算量は $O(N + M)$ ぐらい。
メモ
- 「
B
の隙間にA
を挿入」系の考え方は典型感あるけど、他の例がすぐに出てこなくて困る (A?A?B+)*
と書きたくなるが、含まれる個数に関する制約があるので (有限性で殴らない限りは) 正規表現では書けない