結果
問題 |
No.3237 Find the Treasure!
|
ユーザー |
![]() |
提出日時 | 2025-08-15 22:02:50 |
言語 | Crystal (1.14.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,001 bytes |
コンパイル時間 | 11,958 ms |
コンパイル使用メモリ | 311,364 KB |
実行使用メモリ | 26,284 KB |
平均クエリ数 | 13.52 |
最終ジャッジ日時 | 2025-08-15 22:03:12 |
合計ジャッジ時間 | 20,772 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 1 |
other | AC * 4 WA * 18 |
ソースコード
def query(a) puts "? #{a.map { |v| v + 1 }.join(" ")}" res = read_line if res == "Invalid" exit 1 end return res == "Yes" end n = read_line.to_i g = Array.new(n) { [] of Int32 } es = Array.new(n - 1) do u, v = read_line.split.map { |v| v.to_i - 1 } g[u] << v g[v] << u {u, v} end q = [0] depth = Array.new(n, -1) parent = Array.new(n, -1) depth[0] = 0 n.times do |i| cur = q[i] g[cur].each do |adj| next if parent[cur] == adj parent[adj] = cur depth[adj] = depth[cur] + 1 q << adj end end q = es.map { |u, v| depth[u] % 2 == 0 ? u : v }.to_a cands = [] of Int32 if query(q) cands = n.times.select { |i| depth[i] % 2 == 0 }.to_a else cands = n.times.select { |i| depth[i] % 2 == 1 }.to_a end while cands.size > 1 use = cands.first(cands.size // 2).to_set q = es.map { |u, v| use.includes?(u) ? u : v }.to_a if query(q) cands.select! { |v| use.includes?(v) } else cands.reject! { |v| use.includes?(v) } end end puts "! #{cands[0] + 1}"