AtCoder Beginner Contest 045 C – たくさんの数式 をPython3で解く

Share

AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
AtCoder Beginner Contest 045 C – たくさんの数式

こういう感じのパズルあるよね~といった感じの問題。

# AtCoder Beginner Contest 045 C - たくさんの数式
# https://atcoder.jp/contests/abc045/tasks/arc061_a
# tag: bit全探索 典型問題

def main():
    S = input()

    result = 0

    # ある文字の直後に '+' を入れるかどうかで全探索
    for st in range(1<<(len(S)-1)):
        # 現在の数字
        tmp = 0
        for i, c in enumerate(S):
            # 前の数字と繋げる。
            # 直前に '+' があるとき(or 左端)は、tmp = 0 としておく。
            tmp = tmp * 10 + int(c)

            # 次に '+' なら、一旦数字を切る
            if st>>i & 1:
                result += tmp
                tmp = 0

        # 残った分を足す
        result += tmp
    # 回答
    print(result)

main()

Share

コメントを残す

メールアドレスが公開されることはありません。