結果
問題 | No.2029 Swap Min Max Min |
ユーザー | maspy |
提出日時 | 2022-08-07 00:50:18 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,263 bytes |
コンパイル時間 | 246 ms |
コンパイル使用メモリ | 12,544 KB |
実行使用メモリ | 10,880 KB |
最終ジャッジ日時 | 2024-09-16 18:46:28 |
合計ジャッジ時間 | 3,174 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | RE | - |
testcase_01 | RE | - |
testcase_02 | RE | - |
testcase_03 | RE | - |
testcase_04 | RE | - |
testcase_05 | RE | - |
testcase_06 | RE | - |
testcase_07 | RE | - |
testcase_08 | RE | - |
testcase_09 | RE | - |
testcase_10 | RE | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | RE | - |
testcase_16 | RE | - |
testcase_17 | RE | - |
testcase_18 | RE | - |
testcase_19 | RE | - |
testcase_20 | RE | - |
testcase_21 | RE | - |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
testcase_25 | RE | - |
testcase_26 | RE | - |
testcase_27 | RE | - |
testcase_28 | RE | - |
testcase_29 | RE | - |
testcase_30 | RE | - |
testcase_31 | RE | - |
testcase_32 | RE | - |
testcase_33 | RE | - |
testcase_34 | RE | - |
testcase_35 | RE | - |
testcase_36 | RE | - |
testcase_37 | RE | - |
testcase_38 | RE | - |
testcase_39 | RE | - |
testcase_40 | RE | - |
testcase_41 | RE | - |
testcase_42 | RE | - |
testcase_43 | RE | - |
testcase_44 | RE | - |
ソースコード
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)