落ちているやり方と違っていたので
仮にf(i,j)が一瞬でわかったとして、長さは106であるから、 f(i,j)の全ての通りを足す時間(1012)はない。
ここで、例えばあるiについて がすでにわかっていたとする。 このとき、g(i-1)との間に何か関係があれば、 106に対して2乗しないで済み、他のg(i)を定数で求められるので、合計が106で求まる。
ここで、
である。
ここで、であるから、
以上を用いて作成したプログラムは以下の通り。
n=int(input()) s=input() g_old=int(s[0]) r=g_old for j in range(1,n): g_old=j-int(s[j])*g_old + int(s[j]) r+=g_old print(r)