結果
問題 |
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)