結果
| 問題 | No.3562 Communicate Sorted Vector |
| コンテスト | |
| ユーザー |
maspy
|
| 提出日時 | 2026-05-29 20:38:09 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
AC
|
| 実行時間 | 402 ms / 2,000 ms |
| コード長 | 1,739 bytes |
| 記録 | |
| コンパイル時間 | 652 ms |
| コンパイル使用メモリ | 20,696 KB |
| 実行使用メモリ | 35,480 KB |
| 平均クエリ数 | 3.00 |
| 最終ジャッジ日時 | 2026-05-29 20:39:15 |
| 合計ジャッジ時間 | 57,704 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 45 |
| 部分点2 | 25 % | AC * 45 |
| 部分点3 | 65 % | AC * 46 |
| 合計 | 100 点 |
ソースコード
def C(N, K):
ANS = 1
for k in range(K):
ANS = ANS * (N - k) // (k + 1)
return ANS
def count(N, M):
if M < N:
return 0
# 1<=A[i]<=M
return C(M, N)
def binary_search(check, ok, ng):
while abs(ok-ng) > 1:
mid = (ok+ng)//2
if check(mid):
ok = mid
else:
ng = mid
return ok
def to_rank(A):
if not A:
return 0
N = len(A)
a = A.pop()
ANS = count(N, a - 1)
ANS += to_rank(A)
return ANS
def from_rank(N, rank):
if N == 0:
assert rank == 0
return []
def check(a):
return count(N, a) <= rank
a = binary_search(check, 0, 10**9)
rank -= count(N, a)
A = from_rank(N - 1, rank)
A.append(a + 1)
return A
from_rank(1, 1)
# for n in range(120):
# A = from_rank(3, n)
# m = to_rank(A)
# print(n, A, m)
def ALICE():
N, Q = map(int, input().split())
A = [int(x) for x in input().split()]
M = to_rank(A)
S = bin(M)[2:]
if N == 1:
print(1)
print(S)
return
#
while len(S) < 384:
S = "0" + S
X = S[:7]
Y = S[7:]
n = int(X, 2)
L = Y[0:n + 1]
R = Y[n + 1:]
print(2)
print(L)
print(R)
def BOB():
N, Q = map(int, input().split())
K = int(input())
if N == 1:
assert K == 1
S = input()
A = from_rank(N, int(S, 2))
print(*A)
return
assert K == 2
L = input()
R = input()
n = len(L) - 1
X = bin(n)[2:]
while len(X) < 7:
X = "0" + X
Y = L + R
S = X + Y
X = int(X, 2)
A = from_rank(N, int(S, 2))
print(*A)
P = input()
if P[0] == "A":
ALICE()
else:
BOB()
maspy