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