All Articles

ARC061 A

bit全検索を使って解く

問題文

https://atcoder.jp/contests/abc045/tasks/arc061_a

ロジック

  • 与えられた文字列の各文字間に + を入れる・入れないを全検索する => 2**(len(S)-1)の範囲でbit全検索
  • + を入れると数値が切れるので、 ans に足しこむ + を入れない場合は一桁増えるので * 10する

    for i in range(len(S)):
    if (b>>i) & 1:
        ans += tmp*10 + int(S[i])
        tmp = 0
    else:
        tmp = tmp*10 + int(S[i])

提出したコード

S = input()

ans = 0

for b in range(2**(len(S)-1)):
    tmp = 0
    for i in range(len(S)):
        if (b>>i) & 1:
            ans += tmp*10 + int(S[i])
            tmp = 0
        else:
            tmp = tmp*10 + int(S[i])
    ans += tmp

print(ans)

https://atcoder.jp/contests/abc045/submissions/24776503