結果
| 問題 |
No.2577 Simple Permutation Guess
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-12-05 00:18:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 834 bytes |
| コンパイル時間 | 755 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 82,392 KB |
| 平均クエリ数 | 0.91 |
| 最終ジャッジ日時 | 2024-09-26 23:30:01 |
| 合計ジャッジ時間 | 16,284 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 1 |
| other | RE * 111 |
ソースコード
from src.data_structure.BIT import BIT
n = int(input())
L = [0] * n
R = [i for i in range(n)]
def f():
X = [(l + r) for l, r in zip(L, R)]
for i in range(n - 1):
if X[i] > i:
X[i] -= i + 1
X[i + 1] += 1
for i in range(n - 1, -1, -1):
if X[i] % 2 == 1:
X[i - 1] += i
X[i] //= 2
X[0] //= 2
return X
def ask(X, q="?"):
P = []
bit = BIT(n)
for i in range(n):
bit.add(i, 1)
for x in X[::-1]:
p = bit.lower_bound(x + 1) - 1
P.append(p + 1)
bit.add(p, -1)
print(q, *P, flush=True)
if q == "?":
return int(input())
while 1:
mid = f()
if mid == L:
break
if ask(mid) == 0:
R = mid
else:
L = mid
if ask(R) == 0:
ask(R, "!")
else:
ask(L, "!")