This documentation is automatically generated by online-judge-tools/verification-helper
# verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/courses/lesson/8/ITP2/all/ITP2_11_C require "../../src/int/each_subset" n = read_line.to_i a = read_line.split.map(&.to_i).skip(1).reduce(0) { |acc, x| acc | (1 << x) } puts a.each_subset.map { |x| "#{x}:" + (0...n).select { |i| x.bit(i) == 1 }.join { |x| " #{x}" } }.to_a.reverse.join('\n')
# verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/courses/lesson/8/ITP2/all/ITP2_11_C # require "../../src/int/each_subset" struct Int private class SubsetIterator(T) include Iterator(T) def initialize(@set : T) @subset = T.zero.as(T) @first = true end def next if @subset == 0 && !@first stop else @first = false @subset = ~-@subset & @set end end end # Returns an iterator that returns all subsets of `self`. # # ``` # 0b101.each_subset.to_a # => [0b101, 0b100, 0b001, 0b000] # ``` def each_subset SubsetIterator.new(self) end # Calls the given block for each subset of `self`. # # ``` # # x = 0b101, 0b100, 0b001, 0b000 # 0b101.each_subset { |x| } # ``` def each_subset(&) yield self sub = ~-self & self loop do yield sub break if sub == 0 sub = ~-sub & self end end end n = read_line.to_i a = read_line.split.map(&.to_i).skip(1).reduce(0) { |acc, x| acc | (1 << x) } puts a.each_subset.map { |x| "#{x}:" + (0...n).select { |i| x.bit(i) == 1 }.join { |x| " #{x}" } }.to_a.reverse.join('\n')