tookunn’s diary

主に競技プログラミング関係

AtCoder Beginner Contest 190 D - Staircase Sequences

問題

atcoder.jp

考察

まず、公差1の等差数列の総和の特性を見つけるために
公差1の等差数列の総和を求める式を考える。

総和をN、初項をA、項数をLとすると
 N = \frac{1}2 \times L \times (A + A + L - 1)
 N = \frac{1}2 L (2A + L - 1)
扱いやすいように両辺に2を掛けて
 2N = L (2A + L - 1)となる。

この式から
2Nは、Lまたは(2A + L - 1)で割り切れる値だということが分かる。(つまり約数である)

分かりやすくすると
 2N = X \times Yという式で表すことができて、 2NXYを約数に持ち、
 X = L, Y = (2A + L - 1)または X = (2A + L - 1), Y = Lであるということ。

ここで Lさえ分かれば 2Nから (2A + L - 1)も求めることができて良さそうなので
 L \sqrt{2N}まで全部試していく。
 2Nは偶数なので、X Yのどちらかは偶数であり、 2Aが偶数であることを
確かめていき、OKならカウントしていく。