ABC171-F : Strivoreの解き方が少し想定解法と違ったので書き残しておく
想定解法と少し考え方が違ったので、私の解法を書いとこうかと思います。
注意:備忘録のようなものなので、少し解説としては雑です。ご了承ください。
まず、「好きな英小文字文字を好きな位置に挿入する」という操作を文字列にちょうど回繰り返してできる文字列は何通りあるでしょう?という問題は、文字の英小文字から成る文字列はいくつあるでしょう?という問題に帰着させることができる。
ここで、の頭文字を部分文字列(連続とは限らない)として含むかつ、頭文字は部分文字列として含まない文字の英小文字から成る文字列の集合をとし、その要素数をとする。
また、便宜上を部分文字列として含む文字の英小文字から成る文字列の集合をとし、その要素数をとすると、式が成り立つ。なぜなら、任意のある文字の英小文字から成る文字列において、のいずれか1つのみに必ず属すからだ。
出力する解はであるが、私は直接求めるのではなく、上記の式を変形し、としてから求めた。において、は次のようなイメージで求めた。(図中のS_kをの文字目とする)
上図のような文字の英小文字から成る文字列は全てに属し、逆にに属す文字列は全て上図のような文字の英小文字から成る文字列となるのは明確である。まず、の配置パターン数はである。次に、ある配置パターンにおいてその他の文字を配置するパターン数はである。の配置パターンが異なる場合、文字列がダブることはないため、上図のような文字の英小文字から成る文字列の数すなわちは、となる。下処理をで行うことで各iにおけるを定数時間で求めることができるため、全体としてで解くことができる。