ABC033 C - 数式の書き換え

備忘録

問題

atcoder.jp

回答

import sys
import os

ii = lambda: int(sys.stdin.buffer.readline().rstrip())
il = lambda: list(map(int, sys.stdin.buffer.readline().split()))
iss = lambda: sys.stdin.buffer.readline().decode().rstrip()

def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    A = iss()
    A = A.split('+')
    ret = 0
    for a in A:
        if '0' not in a: ret+= 1

    print(ret)

if __name__ == '__main__':
    main()

考え方

積の結果をすべて0にして、加算すればよい。
つまり、加算(+)で式を分割し、積(*)あるいは
分割された整数が0にする必要があるか否かをカウントすることで、回答を得られる。

3*1*4+0+2*0+5*2+9*8*6+1+3
インプットに上記のような式が与えられた場合、
加算(+)で分割すると、['3*1*4', '0', '2*0', '5*2', '9*8*6', '1', '3']となる。
分割したまとまりはすべて加算(+)でつながるため、
各々のまとまりの計算結果が0にすることが出来れば、回答も0となる。

各々のまとまりの計算結果が0になるか否かは、
まとまりの中に0を含んでいるか否かを判定すればよいので、
0を含めていないまとまりの個数をカウントすると、カウント結果が回答となる。