結果
| 問題 |
No.2029 Swap Min Max Min
|
| コンテスト | |
| ユーザー |
maspy
|
| 提出日時 | 2022-08-07 00:50:18 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,263 bytes |
| コンパイル時間 | 246 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 10,880 KB |
| 最終ジャッジ日時 | 2024-09-16 18:46:28 |
| 合計ジャッジ時間 | 3,174 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 3 |
| other | RE * 42 |
ソースコード
import itertools
from collections import deque
def solve(n, a):
x = n // 2
y = 0
ind = []
for i in range(n):
if a[i] <= x:
ind.append(i)
if n % 2 == 1:
for i, v in enumerate(ind):
y += abs(v - (2 * i + 1))
else:
y1 = 0
y2 = 0
for i, v in enumerate(ind):
y1 += abs(v - (2 * i + 1))
y2 += abs(v - 2 * i)
y = min(y1, y2)
return x, y
def naive(N, A):
# N! 状態の最短路
dist = dict()
que = deque()
def add(x, d):
if x not in dist:
dist[x] = d
que.append(x)
add(A, 0)
while que:
A = que.popleft()
for i in range(N - 1):
B = list(A)
B[i], B[i + 1] = B[i + 1], B[i]
add(tuple(B), dist[A] + 1)
X, Y = 10000, 0
for A, y in dist.items():
x = max(min(a, b) for a, b in zip(A, A[1:]))
if X > x:
X = x
Y = y
if X == x:
Y = min(Y, y)
return X, Y
# 2 <= N <= 6 という入力を全部チェック
for N in range(2, 6):
for A in itertools.permutations(range(1, N + 1)):
me = solve(N, A)
ac = naive(N, A)
assert me == ac, (N, A, me, ac)
maspy