結果
| 問題 |
No.2577 Simple Permutation Guess
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2023-11-24 02:07:28 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
QLE
|
| 実行時間 | - |
| コード長 | 752 bytes |
| コンパイル時間 | 698 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 93,920 KB |
| 平均クエリ数 | 284.71 |
| 最終ジャッジ日時 | 2024-09-26 22:29:30 |
| 合計ジャッジ時間 | 22,163 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | QLE * 1 |
| other | QLE * 111 |
ソースコード
#クエリ回数上限+1確認
def floor_log(n):
a,p=0,1
while p*2<=n:a,p=a+1,p*2
return a
O,R=print,range
I=lambda:int(input())
N=I()
q=int(floor_log(N**(N-1))-(N-1)/2+1)+1
n=R(N)
Q=[0]*N
u=set(i+1for i in n)
v=set(u)
def S(Q,k):
v=set(u)
for i in n:
Q[i],k=sorted(v)[k//F[N-i-1]],k%F[N-i-1]
v.remove(Q[i])
if N<9:
F=[1]
for i in n:F+=[F[-1]*(i+1)]
l,r=0,F[N]
while l<r-1:
m,q=(l+r)//2,q-1
S(Q,m),O("?",*Q)
if I():l=m
else:r=m
S(Q,l)
else:
for i in R(N-1):
l,r,X=0,N-i,sorted(v)
while l<r-1:
m,j,q=(l+r)//2,i+1,q-1
t=Q[i]=X[m]
for k in R(N-i):
if X[k]!=t:Q[j],j=X[k],j+1
O("?",*Q)
t=I()
if t<1:r=m
else:l=m
t=Q[i]=X[l]
v.remove(t)
Q[N-1]=v.pop()
while q:
q-=1
O("?",*Q)
assert(q==0)
O("!",*Q)