mini notes

競技プログラミングの解法メモを残していきます。

JOI 2019/2020 本選 B - JJOOII 2 (JJOOII 2)

問題:B - JJOOII 2 (JJOOII 2)

解答:Submission #19057001 - JOI 2019/2020 本選 過去問

解法:まず、Oの選び方を考える。最初に用いるOを選んだとき、それ以降のOはそこからなるべく近くにあるOを選んでいったほうが良い。すると、使用するOが決まる。さらにJの選び方を考えるが、これは最初のOより左側のJでかつこれもなるべく近くにあるJを選んでいった方がよい。Iも同様である。よって、最初に用いるOを選ぶと、どのJ, O, Iを選ぶかが決まることになる。

あとは3の操作の回数を求める。使用するJ, O, Iの個数はそれぞれK個であることはあらかじめ決まっているので、「一番前のJ」「一番後のJ」「一番前のO」「一番後のO」「一番前のI」「一番後のI」のそれぞれの添字が分かれば計算で求めることが出来る。これらの添字管理は最初に用いるOを変えるに伴い動的に更新してゆけばよい。