公式

A - Bracket Game 解説 by blackyuki


\(S\) が正しい括弧列でない場合、太郎君が最初のターンで終了宣言をすることで太郎君が勝つことができます。以下、\(S\) が正しい括弧列である場合を考えます。

\(S\) が正しい括弧列である時、\(S\) の長さは偶数であるため、次郎君が操作する直前の \(S\) の長さは必ず奇数となります。よって、次郎君が終了宣言をしても必ず負けてしまうので、終了宣言をする可能性があるのは太郎君だけです。

また、\(K\) が奇数の場合は太郎君が終了宣言をしないことで、\(|S|=K\) となるまでゲームが続行し、必ず太郎君が勝つことができます。以下、\(K\) が偶数の場合のみ考えます。

ここで重要な事実として、どんな正しい括弧列 \(S\) についても、太郎君が先頭あるいは末尾の \(1\) 文字を削除し次郎君に渡した時、次郎君が正しい括弧列に戻すためにできる行動は高々 \(1\) つです。

\(S\) の先頭が ((、末尾が )) の場合

太郎君が先頭を消すと次郎君は末尾を消し、太郎君が末尾を消すと次郎君は先頭を消すため、次の盤面が一意に定まります(必ずしも次郎君が \(S\) を正しい括弧列に戻すことができるとは限りません)。

そうでない場合

太郎君の最適な戦略は、先頭と末尾のうち、連続する () が少ない方を選び、消していくことです。例えば、\(S\)()(())()() のとき、太郎君と次郎君は先頭の () を消去し、\(S\)(())()() となります。次にもう一度先頭を削除すれば正しい括弧列が崩れます。

このようにして、\(S\) の長さが \(K\) になるまで次郎君が正しい括弧列を維持できた場合次郎君の勝ち、できなかった場合太郎君の勝ちとなります。

投稿日時:
最終更新: