ABC033 C - 数式の書き換え
備忘録
問題
回答
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
を含めていないまとまりの個数をカウントすると、カウント結果が回答となる。