問題
入力された多彩な単語に対し,辞書順で次の多彩な単語を求める.
理解
多彩な単語の辞書がすぐには想像できないので書き下すことにする.「見たものは想像できる」の精神.
a
から始まる多彩な単語について,次の図のように木の形に単語を列挙する(かなり省略は多いが).根の多彩な単語に文字を1つ付け足すようにして子の多彩な単語を作っている.
各単語の前の数字は辞書での順番を表す.多彩な単語の辞書は,この木における深さ優先な順序で単語が並ぶことが分かる.
c++ の next_permutation
は並び替えの文字列で辞書順に次の要素に更新してくれる.*1
以上のことを知れば,A: Diverse Word - AtCoder Grand Contest 022 - parukiのブログ の解法が納得できた.