結果
問題 | No.2577 Simple Permutation Guess |
ユーザー | Rubikun |
提出日時 | 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 |
ソースコード
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()