問題一覧 > 通常問題

No.2577 Simple Permutation Guess

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / リアクティブ問題 (詳しくはこちら
タグ : / 解いたユーザー数 45
作問者 : nullnull / テスター : 👑 p-adicp-adic
0 ProblemId : 9689 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-12-05 00:12:21

問題文

ジャッジは長さ $n$ の順列 $P$ を持っています。$n$ のみが与えられるので、次のクエリを $\lfloor \lfloor (n - 1) \log_2 n \rfloor - \frac{n - 1}{2} +1 \rfloor$ 回まで用いて、順列 $P$ を当ててください。

クエリ:順列 $Q$ を送る。$Q \le P$ であるかどうかを得る。

ただし、長さ $n$ の順列とは $1, 2, \dots, n$ の並べ替えのことです。また、$Q \le P$ とは、すべての $1 \le i \le n$ に対して $Q_i=P_i$ であるか、ある $j$ が存在して、すべての $1 \le i < j$ について $Q_i=P_i$ でありかつ $Q_j < P_j$ であることです。

ジャッジについて

本問題のジャッジは、adaptive です。クエリへの返答に矛盾しない場合、ジャッジが $P$ を変更する可能性があります。

追記:誤字を直しました。(「ジャッジについてについて」を「ジャッジについて」に修正)(0:12)

evil ケースについて

本問題では、リアクティブジャッジの速度の都合上制約を小さくしておりますが、 高速な解法との区別のため evil ケース(こちら 「正解判定のポリシー」を参照してください)を導入しております。このケースの結果はジャッジ結果には影響しません。

制約

  • $1 \le n \le 250$
  • $P$ は順列。
  • 入力は全て整数。

evil ケースの制約

  • $250 < n \le 400$
  • $P$ は順列。
  • 入力は全て整数。

入出力

まず、整数 $n$ が与えられます。

$n$

次に、あなたは $\lfloor \lfloor (n - 1) \log_2 n \rfloor - \frac{n - 1}{2} +1 \rfloor$ 回まで次の形式のクエリを送ることができます。ここで、数列 $Q$ は順列でなければなりません。

$?\ Q_1\ Q_2\ \dots\ Q_n$

$Q \le P$ なら $ret=1$ 、$Q>P$ なら $ret=0$ 、ジャッジに何らかの問題があった場合 $ret=-1$ が与えられます。

$ret$

ここで、$ret = -1$ なら、プログラムを直ちに終了させてください。そうでないなら、クエリを続行するか順列を回答してください。

順列を回答する場合、次の形式で出力してください。この出力はクエリにカウントされません

$!\ Q_1\ Q_2\ \dots\ Q_n$

その後、プログラムを直ちに終了させてください。

注意

  • 各出力のたびに末尾改行と出力の flush をしてください。
  • 不正な出力や動作に対するジャッジは不定である可能性があります。

サンプル

やり取りの一例であって、最適なクエリの送り方ではない可能性があります。
入力出力説明
5$n=5$
? 1 2 3 4 5$Q=1, 2, 3, 4, 5$ でクエリを送った。
1クエリへの返答は $Q \le P$ であった。
? 5 4 3 2 1$Q=5, 4, 3, 2, 1$ でクエリを送った。
0クエリへの返答は $Q>P$ であった
? 2 5 1 4 3$Q=2, 5, 1, 4, 3$ でクエリを送った。
1クエリへの返答は $Q \le P$ であった
? 2 5 4 3 1$Q=2, 5, 4, 3, 1$ でクエリを送った。
1クエリへの返答は $Q \le P$ であった
! 2 5 4 3 1$Q=2, 5, 4, 3, 1$ で回答を送った。
ジャッジ結果で WA を得る。$P=2,5,4,3,1$ であったが、例えば $P=5,4,3,1,2$ も今までのクエリに矛盾しないため、ジャッジは $P$ を変更した。
例えば、回答前に次のクエリを送れば、順列は一意に定まりジャッジ結果で AC を得られる。
入力出力説明
? 3 1 2 4 5$Q=3, 1, 2, 4, 5$ でクエリを送った。
0クエリへの返答は $Q > P$ であった

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。