結果

問題 No.1538 引きこもりさんは引き算が得意。
ユーザー tomerun
提出日時 2021-06-06 19:13:34
言語 Crystal
(1.14.0)
結果
WA  
実行時間 -
コード長 1,519 bytes
コンパイル時間 15,397 ms
コンパイル使用メモリ 296,908 KB
実行使用メモリ 8,040 KB
最終ジャッジ日時 2024-11-23 05:18:08
合計ジャッジ時間 15,507 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 42 WA * 4 RE * 8
権限があれば一括ダウンロードができます

ソースコード

diff #

n, k = read_line.split.map(&.to_i)
a = read_line.split.map(&.to_i64)
pre = a[0...(n // 2)]
suf = a[(n // 2)..]
po1, no1, mix1 = comb(pre)
po2, no2, mix2 = comb(suf)
po1.each do |s|
  if no2.includes?(k - s) || mix2.includes?(k - s)
    puts "Yes"
    exit
  end
end
no1.each do |s|
  if po2.includes?(k - s) || mix2.includes?(k - s)
    puts "Yes"
    exit
  end
end
mix1.each do |s|
  if po2.includes?(k - s) || no2.includes?(k - s) || mix2.includes?(k - s)
    puts "Yes"
    exit
  end
end
puts "No"

def comb(a)
  po = Set(Int64).new
  no = Set(Int64).new
  mix = Set(Int64).new
  a.size.times do |i|
    dfs_po(a, i + 1, a[i], po, no, mix)
    dfs_no(a, i + 1, -a[i], po, no, mix)
  end
  return po, no, mix
end

def dfs_po(a, i, sum, set_po, set_no, set_mix)
  if i == a.size
    set_po << sum
    return
  end
  dfs_po(a, i + 1, sum, set_po, set_no, set_mix)
  dfs_po(a, i + 1, sum + a[i], set_po, set_no, set_mix)
  dfs_mix(a, i + 1, sum - a[i], set_po, set_no, set_mix)
end

def dfs_no(a, i, sum, set_po, set_no, set_mix)
  if i == a.size
    set_no << sum
    return
  end
  dfs_no(a, i + 1, sum, set_po, set_no, set_mix)
  dfs_mix(a, i + 1, sum + a[i], set_po, set_no, set_mix)
  dfs_no(a, i + 1, sum - a[i], set_po, set_no, set_mix)
end

def dfs_mix(a, i, sum, set_po, set_no, set_mix)
  if i == a.size
    set_mix << sum
    return
  end
  dfs_mix(a, i + 1, sum, set_po, set_no, set_mix)
  dfs_mix(a, i + 1, sum + a[i], set_po, set_no, set_mix)
  dfs_mix(a, i + 1, sum - a[i], set_po, set_no, set_mix)
end
0