No.295

文字ごとに考えて最後に掛け算をする.

アルファベット a の中に __aa___a_aaa のようにあるとする. このとき, a 個に振り分けたときの 数は,

になる. すなわち, 連続する a の中に という感じであるとき,

という条件下で

を最大化するという問題になる.

そこで最初に 個のアルファベットは割り当てておいて, 残りの 個をどう割り当てるかを考える. これは各 のどの項に割り当てれば最も大きくできるかを考えればいい. に割り当てると値は

倍になるので, 各項ごとにこの倍率を計算して優先順位付きキューに入れておいて, 順に更新していく.

ただし, 回の更新が必要になるので, が大きい場合はこの方法は使えない.

そこで, のときは, 値は最低でも 以上になるので, の場合は を超えるのは確実なので hel である.

のときは, ならば等分に分けるのが最もよく, または ならば を超えるのは確実なので hel である.

のときは, ならば が答えであり, ならば が答えとなる. ならば を超えるので hel である.