AtCoder Beginner Contest 278 F問題 Shiritori
問題
提出解答
問題の概要
個の文字列 が与えられる.
先手と後手の2人がこの 個の文字列を用いてしりとりをする. 先手から交互に以下を満たすような整数 を選ぶ.
- はこれまで1回も選ばれていない.
- 先手の第1ターン, または直前に選ばれた整数を としたとき, の末尾の文字と の先頭の文字が等しい.
条件を満たすような を選べなくなったら負けである.
両者が勝利のために最善を尽くした場合, 勝つのはどちらか?
制約
- は長さ 以上 以下の英小文字からなる文字列.
解法
bit dp で解くことにする. の空ではない部分集合 と整数 に対して, を
- 既に選ばれている整数の集合が で, 特に最後に選ばれた整数が である場面で回ってきた時, その人必勝ならば , 必敗ならば とする.
このとき, の先頭と末尾の文字をそれぞれ とすると, 更新式はまだ選ばれていないしりとり可能な文字列を候補にし, 1つでもその先で必敗しなくてはならないので,
である.
先手必勝であるための必要十分条件は最初に選ぶ文字列で場合分けすることによって,
となる.