問題はこちら
問題概要
の段数がある階段がある. その階段の番目の段差の高さはであり, である. 段差の和が以下の段を一度に上ることができるとき, 階段の上り方の数を1234567で割った余りを求めよ.
思考の流れ
ぱっと見DPというのはすぐわかる. 段目につく上り方の総数, とすると更新式は
(は段目の段差との高さの差が以下であるもの)
段目の段差との高さの差が以下であるもの和をいちいち求めていたら1回の更新にかかる.
連続する区間の和の形になっているので累積和を使えそう.
後は段目の段差との高さの差がである中で最小のものの位置さえわかればいいようになった.
地上(段目)の高さとし, 地上からの各段差までの高さを持っておくと, 段目の段差と段目の段差との高さの差がであるということはということになる. このようなで最小なものは二分探索を行うことで求めることができる. 他にも尺取り法を用いても求めることができる.
提出プログラム
https://atcoder.jp/contests/joisc2010/submissions/11975093
感想
すぐに解法が浮かんだのでよかった. こういう問題好き.