公式

A - Yet Another AB Problem 解説 by nok0


操作回数を最小化するためには,\(S_i\neq T_i\) であるような文字に対して操作を多く行いたいです.

\(S_i\neq T_i\) であるような文字のみを \(T\) の左から順に取り出し,\(T_i\)A であるものを ( で,\(T_i\)B であるものを ) で置き換えて得られる文字列を \(U\) とします.

例えば,\(S\)BAABA\(T\)AABBB のとき,\(U\)()) となります.

このとき,\(U\) が正しい括弧列であれば \(|U|\)\(2\) で割ったものが答えとなります.括弧列の対応関係に添うように操作を行えばよいです.

そうでないとき, \(T_i\)A であるような一番左の位置に ( を, \(T_i\)B であるような一番右の位置に ) を最小何個挿入すれば正しい括弧列にできるかが分かればよいです.(\(T_i\)A であるような一番左の位置や, \(T_i\)B であるような一番右の位置によっては正しい括弧列にできない場合がありますが,その場合答えは \(-1\) です.)

挿入する必要のある個数の最小値は,左端に ( を必要なだけ挿入し,その後右端に ) を必要なだけ挿入する貪欲法で求めることができます.

投稿日時:
最終更新: