ABC100 C - *3 or /2
備忘録
問題
回答
import sys import os ii = lambda: int(sys.stdin.buffer.readline().rstrip()) il = lambda: list(map(int, sys.stdin.buffer.readline().split())) iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] iss = lambda: sys.stdin.buffer.readline().decode().rstrip() isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") N = ii() A = il() ans = 0 for a in A: while a % 2 == 0: ans += 1 a //= 2 print(ans) if __name__ == '__main__': main()
考え方
数列A
のすべての値に対して 「2で割る」または「3倍にする」を行う。
上記の操作で「全ての整数に対して3倍にする」ことはできないので、
必ずどこか1つの整数を「2で割る」必要がある。
つまり、「2で割る」ことが出来る整数がなくなった時点が操作の終了となる。
この条件から、「2で割る」ことが出来る回数を数えることで回答が得られる。
何度「2で割る」ことができるかを数列A
の中からすべての値に対して試すことで、
「2で割る」ことが出来る回数を求める。