CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning
解法
が回文になる条件は、a
~ z
について、に含まれる個数が全て偶数になる、もしくはどれか1つのみが奇数になる、のどちらかです。
a
, b
, ..., z
とします。
先頭の文字から番目の文字までを見て、奇数個になる文字について、を計算したものをとします。
が回文になる条件は、との排他的論理和を取った際に立つ2進数のbitが1個以下になる、というものに言い換えられます。
- 文字目までで、分割できる回文の個数の最小値
を考えると、
という遷移が成り立ちます。
ここで、はを2進表記した際に立つビットの個数とします。
これだけみるとになりますが、それぞれの2進表記で一番小さい値となるものをメモしておけば、27通りについて確認するだけで問題ありません(2進表記は、が累積xorを取っているだけなので最大通りです)。
あとはこれを計算し、を求めればおしまいです。
感想
とても面白かったです。