atcoder#ABC269E. [ABC269E] Last Rook
[ABC269E] Last Rook
配点 : 点
問題文
この問題はインタラクティブな問題(あなたの作成したプログラムとジャッジプログラムが入出力を介して対話を行う形式の問題)です。
縦横 マスのチェス盤と 個のルークの駒があります。以下では上から 行目、左から 列目のマスを と表します。 チェス盤のマスにルークを置くことを考えます。ただし、あなたは次の条件をすべて満たすようにルークをチェス盤に置く必要があります。
- 1 つの行に 個以上のルークが存在しない。
- 1 つの列に 個以上のルークが存在しない。
今、チェス盤に 個のルークが上の条件をすべて満たした状態で置かれています。あなたはルークが置かれていないマスを 1 つ選び、そのマスにルークを置くことにしました。(上の条件をすべて満たすようにルークを置くことができるマスは少なくとも 1 つ以上存在することが証明できます。)
ただし、あなたはチェス盤のどのマスにルークが置かれているかを直接知ることはできません。 そのかわりに、ジャッジシステムに対して以下の質問を 回まで行うことができます。
- 整数 を を満たすように選ぶ。そして、 を満たすマス からなる長方形領域に置かれているルークの個数を聞く。
ルークを置くことができるマスを見つけてください。
制約
- は整数
入出力
この問題はインタラクティブな問題(あなたの作成したプログラムとジャッジプログラムが入出力を介して対話を行う形式の問題)です。
最初に、チェス盤のサイズ を標準入力から受け取ってください。
N
次に、ルークを置くことができるマスが見つかるまで質問を繰り返してください。 質問は、以下の形式で標準出力に出力してください。
? A B C D
これに対する応答は、次の形式で標準入力から与えられます。
T
ここで、 は質問に対する答えです。ただし、不正な質問を行った、あるいは質問の回数が 回を超えた場合は は -1
となります。
ジャッジが -1
を返した場合、提出はすでに不正解とみなされています。この場合、ただちにプログラムを終了してください。
ルークを置くことができるマスを見つけたら、そのマスを として、解答を以下の形式で出力してください。その後、ただちにプログラムを終了してください。
! X Y
答えが複数ある場合、どれを出力しても正解とみなされます。
注意点
- 出力を行うたびに、末尾に改行を入れて標準出力を flush してください。そうしなかった場合、ジャッジ結果が TLE となる可能性があります。
- 対話の途中で不正な出力を行った場合のジャッジ結果は不定です。
- 解答を出力したらただちにプログラムを終了してください。そうしない場合、ジャッジ結果は不定です。
入出力例
以下は、 で にルークが置かれている場合の入出力例です。
入力 | 出力 | 説明 |
---|---|---|
3 |
まず整数 が与えられます。 | |
? 1 2 1 3 |
として質問を行います。 | |
2 |
質問の答えは なので、ジャッジはその値を返します。 | |
? 2 3 1 1 |
として質問を行います。 | |
1 |
質問の答えは なので、ジャッジはその値を返します。 | |
? 1 3 3 3 |
として質問を行います。 | |
0 |
質問の答えは なので、ジャッジはその値を返します。 | |
! 3 3 |
答えは だとわかったので、それを出力します。 |