この問題は階差数列を問います。
問題の条件は、A が階差数列となることがわかります。さらに A1 が与えられているので、A は一意に定まります。
これらから数列 A の一般項が Ai=A1+k=1∑i−1Bk と求めることができます。これは一般に知られていますが、実験してみてもわかります。
さて、問題なのは A1+A2+A3+...+AN を求めることです。
上の一般項を使って愚直に求めてもいいですが、次のように変形することで解くことも可能です。
- k=1∑NAk=(A1+j=1∑2−1Bj)+(A1+j=1∑3−1Bj)+(A1+j=1∑4−1Bj)+...+(A1+j=1∑N−1Bj)=NA1+i=2∑Nj=1∑i−1Bj
よって NA1+i=2∑Nj=1∑i−1Bj=K という等式が成り立ち、これから A1=NK−i=2∑Nj=1∑i−1Bj の式を得ることができます。
A は整数列といった条件から A1 の値の範囲を考えず、次の問題に帰着することができます。
- K−i=2∑Nj=1∑i−1Bj が N の倍数であるか判定せよ
これなら簡単な条件分岐で実装することができます。
したがって i=2∑Nj=1∑i−1Bj の値を求めるのに O(N) だけかかる※1ので、全体で O(N) でこの問題を正解することができます。
余談ですがすべての条件を満たす数列 A は A1 の式からただ 1 つに定まることがわかります。
実際に証明することもできますが、ここでは省略します。
※1 i=2∑Nj=1∑i−1Bj は一見 O(N2) で求めると見えますが、
- i=2∑Nj=1∑i−1Bj=B1+(B1+B2)+(B1+B2+B3)+...+(B1+B2+...+BN−1)
と見ることができます。つまり数列 B′=(B1′,B2′,...,BN−1′)=(B1,B1+B2,B1+B2+B3,...,B1+B2+...+BN−1) とすると、B′ の一般項は
- B1′=B1, Bn′=Bn−1′+Bn
と表すことができます(便宜上、漸化式の形で表しています)。
そうして i=1∑N−1Bi′=i=2∑Nj=1∑i−1Bj であるので、上の漸化式を用いて計算することで O(N) で実装することができます。