いろはちゃんコンテスト 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+)*と書きたくなるが、含まれる個数に関する制約があるので (有限性で殴らない限りは) 正規表現では書けない