結果

問題 No.2577 Simple Permutation Guess
ユーザー RubikunRubikun
提出日時 2023-12-05 00:38:45
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 528 ms / 2,000 ms
コード長 1,089 bytes
コンパイル時間 847 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 96,072 KB
平均クエリ数 248.84
最終ジャッジ日時 2024-09-26 23:45:47
合計ジャッジ時間 33,832 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 111
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
from typing import List

def chmax(a, b):
    if a < b:
        a = b
        return True
    return False

def chmin(a, b):
    if b < a:
        a = b
        return True
    return False

def f(K, N, fac):
    ask = []
    rem = list(range(1, N+1))
    for i in range(N-1, -1, -1):
        po = K // fac[i]
        ask.append(rem[po])
        rem.pop(po)
        K -= fac[i] * po
    print("?", *ask)
    sys.stdout.flush()
    re = int(input())
    return re

def g(K, N, fac):
    ask = []
    rem = list(range(1, N+1))
    for i in range(N-1, -1, -1):
        po = K // fac[i]
        ask.append(rem[po])
        rem.pop(po)
        K -= fac[i] * po
    print("!", *ask)
    sys.stdout.flush()

def main():
    fac = [1] * 405
    for i in range(1, 401):
        fac[i] = fac[i-1] * i

    N = int(input())
    
    left, right = 0, fac[N]
    while right - left > 1:
        mid = (left + right) // 2
        res = f(mid, N, fac)
        if res:
            left = mid
        else:
            right = mid
    
    g(left, N, fac)

if __name__ == "__main__":
    main()
0