金魚亭日常

読書,ガジェット,競技プログラミング

AtCoder ABC # 080 C. Shopping Street

  • 素数10の配列
  • 各要素は 0 or 1
  • 全部で 210 = 1024 通り

この組み合わせを列挙して,各要素が0か1か知るには,

# 1 << 10 は 1024 (左シフト)
(1 << 10).times do |b|
  x = []
  10.times do |i|
    # 任意の桁数右シフトして 1 と AND をとる
    x << ((b >> i) & 1)
  end
  p "#{sprintf("%010b", b)}: #{x}"
end

# "0000000000: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"
# "0000000001: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]"
# "0000000010: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]"
# "0000000011: [1, 1, 0, 0, 0, 0, 0, 0, 0, 0]"
# "0000000100: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]"
# ...

AtCoder ABC # 080 C. Shopping Street