AtCoder Beginner Contest 277 D問題 Takahashi's Solitaire
問題
提出解答
問題の概要
枚のカードを手札として持っており, 枚目のカードには整数 が書かれている.
最初, 手札から好きなカードを1枚テーブルに置く. その後, 好きな回数以下の行動を行うことができる.
- 最後に出したカードに書かれている整数を としたとき, 手札にある または と書かれているカードをテーブルに出す.
最終的に残った手札に書かれているカードの総和の最小値を求めよ.
制約
解法
最終的にカードは手札か場札になるので, 手札に書かれている整数の総和を最小にすることは場札にあるカードの整数の総和を最大にすることと同等である. 以降では場札になったカードの整数の総和の最大値を求めることにする.
(1) 任意の 以上 未満の整数 に対して, と書かれたカードが 枚以上ある場合
次のようにして 枚のカードを全て場札にすることができる.
よって, 答えは である.
(2) 以上 未満の整数 で, と書かれたカードが手札に存在しないような が存在する場合.
枚のカードを次のようにしてグルーピングできる.
ただし,
- と書かれたカードが手札にない. なお, のときは とする.
- に対して, または . なお, のときは とする.
- に対して, . なお, のときは とする.
を満たすようにする. このようにすると, は の入れ替えの違いを除いて一意に定まる.
このとき, 相異なるブロックにあるカードを両方場札にすることは不可能であり, の順に出すことで1つのブロックにあるカードを全て場札にすることができる.
これにより, カードに書かれた整数の総和が最大であるようなブロックにあるカードを場札にするのが最適である. つまり,
が答えになる.
計算量については を求めるパートがボトルネックになり, 適切な観点によるソートを実行することにより, 時間で実行できる.