AtCoder Beginner Contest 195 A・C問題

前書き

AtCoder Beginner Contest 195 A・C問題を解きました。

A問題

難易度:灰
時間:1分

atcoder.jp

M,H = map(int,input().split())
if H%M==0: print('Yes')
else: print('No')

C問題

難易度:灰
時間:30分

atcoder.jp

3桁ずつ区切られたコンマ。数値Nまでの数値全てにおいて幾つのコンマがあるかを推測する問題。

例えばコンマが1つの時に該当する数値は1,000〜999,999より合計(999,999-1,000+1)です。
2つの時に該当する数値は1,000,000〜999,999,999より合計(999,999,999-1,000,000+1)。

しかし数値N<999,999の場合は合計(N-1,000+1)といったように計算します。

N = input()
Nlis = [i for i in range(2,len(N)+1)if i%3==1]
_sum = 0 
for j,k in enumerate(Nlis):
  if int(N)>=(10**(Nlis[j]+2)-1):
    _sum+=((10**(Nlis[j]+2)-1)-10**(Nlis[j]-1)+1)*(j+1)
  else:
    _sum+=(int(N)-10**(Nlis[j]-1)+1)*(j+1)
print(_sum)

感想

具体的な数値を頭に浮かべて、アルゴリズムを設計しているが、これでは時間が間に合わないし、正確性が低い。
もう少し脳内で単純化・一般化した解釈が必要である。