結果
| 問題 |
No.1538 引きこもりさんは引き算が得意。
|
| コンテスト | |
| ユーザー |
tomerun
|
| 提出日時 | 2021-06-06 19:26:12 |
| 言語 | Crystal (1.14.0) |
| 結果 |
AC
|
| 実行時間 | 17 ms / 2,000 ms |
| コード長 | 1,745 bytes |
| コンパイル時間 | 15,082 ms |
| コンパイル使用メモリ | 295,508 KB |
| 実行使用メモリ | 7,296 KB |
| 最終ジャッジ日時 | 2024-12-14 05:34:02 |
| 合計ジャッジ時間 | 17,290 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 54 |
ソースコード
n, k32 = read_line.split.map(&.to_i)
k = k32.to_i64
a = read_line.split.map(&.to_i64)
solve(n, k, a)
def solve(n, k, a)
if a.includes?(k)
puts "Yes"
exit
end
pre = a[0...(n // 2)]
suf = a[(n // 2)..]
po1, no1, mix1 = comb(pre)
po2, no2, mix2 = comb(suf)
if mix1.includes?(k) || mix2.includes?(k)
puts "Yes"
exit
end
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"
end
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
tomerun