AtCoder Beginner Contest 269 E問題 Last Rook
問題
提出解答
問題の概要
インタラクティブ問題
行 列のマスからなるチェス盤と 個のルークがある.
このうち, 個のルークが以下を満たすように置かれている.
- どの行にも2個以上のルークが置かれていない.
- どの列にも2個以上のルークが置かれていない.
このとき, 残りの1個のルークを上記の条件を満たすように置きたい.
以下の形式の質問を高々 回行うことにより, 条件を満たすようにルークを置くことが可能なマスを1つ求めよ.
- を満たす整数の組 を用いて, マス を満たすマス に存在するルークの数を聞く.
制約
解法
まず, 可能なマスはただ1通りであることに留意する. そして, 行と列を独立に行い, マスを特定する方針をとる.
行について議論する. となる整数 について, を次のようにする.
- ( 行目から 行目に存在するルークの数)
この について, 以下は同値になる.
- 行目のうち, ルークが1個も置かれていない列が存在する.
可能なマス目の一意性から, を満たす最小の整数を とすると, 行目がルークが1個も置かれていない列である.
そして, は単調増加である. よって, は二分探索によって求めることができる. また, 行目に存在するルークの数は の形式で質問できる.
二分探索における処理の回数は であるから, 回以内で終わる.
これによって高々 回の質問で を特定でき, 同様にして列 も高々 回の質問で特定できる.
以上から, が答えであり, 合計 回以内の質問で特定できた.