ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC128 F - Frog Jump

問題
提出コード

解法

A - B = Xとすると、実際の遷移は図のようになります。
f:id:emtubasa:20190821225843p:plain
ということで、距離Xおきに、前からk個、後ろからk個の蓮の得点を得ると決めた時のAは自動的に決まります。
Xをある値に固定したとき、kはだいたいN/X個の候補が存在し、Xについて全探索を行ってもO(N log N)におさまります。この全探索は、kが小さいパターンから順に、距離Xごとに前後から得点を足していくことで、十分高速に計算することができます。
あとは、A,Xが条件を満たす部分(つまりA \gt X)について全探索を行えば、その中で最も得点が高かったものを選ぶことで答えが求まります。
N-1Xで割り切れるときのみ注意が必要です。このパターンでは、前から見ている蓮と後ろから見ている蓮が被った、もしくは交差した時点で探索を終了する必要があります。

感想

今回ほぼ自力で解くことができたのですが、当時、F問題に十分時間を割けていたらどうだったのでしょうか…