考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC081-B - Shift only を解く

ABC081-B - Shift only

 

複数の整数があり、その整数が全て偶数のとき

2で割ったものに置き換えることができる

この操作を最大何回できるか? という問題

 

そのままシミュレーションしていきたいところだが

整数の制約が 1 <= An <= 10^9 とかなり大きい

とはいえ整数の個数は最大で 200 と少ないので、何とか間に合うだろう

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
N=int(input())
l=list(map(int,input().split()))

# カウンタ
c=0

# ループ脱出フラグ
f=False

while True:
  # 各整数を割る
  for i in range(len(l)):
    if l[i]%2==0:
      l[i]//=2
    else:
      # 割り切れない数があった場合はフラグを立てる
      f=True
      break
  # カウンタを加算
  c+=1

  # フラグが立ったらループ終了
  # カウンタを一回多く加算しているので減らす
  if f:
    c-=1
    break

# 出力
print(c)

 

提出結果はACでした