ARC 020 C - A mod B Problem
整数aの10進表示をp個並べてできた数を(a)pと書くことにし、aの10進表示の長さをd(a)とする。(a)pmodBは繰り返し二乗法の要領で計算できる:
(a)p=⎩⎪⎨⎪⎧0(a)p−1⋅10d(a)+a(a)p/2⋅10d(a)p/2+(a)p/2(p=0)(pが奇数)(pが偶数)
この漸化式に従って各(ai)Liを求めれば、あとはそれらを10d(ai)Liを掛けながら足していけば答えが得られる。
以下、計算量について。
- (ai)Liを求める際の再帰の回数はO(logLi)回
- 10kmodBは繰り返し二乗法でO(logk)で求まる
- d(ai)=O(logai)
したがって、1つの(ai)LiはO(logLi⋅log(d(ai)Li))⊆O(logLi⋅loglogai+log2Li))で求まるはず。a=maxai,L=maxLiとすると全体の計算量はO(N(logL⋅logloga+log2L)))になる。
計算量をちゃんと考えないまま実装に取り掛かかって、O(nlog2n)みたいな形になるはずとぼんやり思っていたのだが、だいたい合っていそうで良かった。