結果
問題 | No.3016 ハチマキおじさん |
ユーザー |
![]() |
提出日時 | 2025-01-27 22:58:40 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 905 ms / 2,000 ms |
コード長 | 1,505 bytes |
コンパイル時間 | 804 ms |
コンパイル使用メモリ | 12,032 KB |
実行使用メモリ | 65,592 KB |
最終ジャッジ日時 | 2025-01-27 22:59:04 |
合計ジャッジ時間 | 19,566 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
from collections import * from itertools import * from functools import cache, partial from pprint import pprint import sys from typing import Any, Final try: from icecream import ic except ImportError: # Graceful fallback if IceCream isn't installed. ic = lambda *a: None if not a else (a[0] if len(a) == 1 else a) # noqa debug = partial(print, file=sys.stderr) dpprint = partial(pprint, stream=sys.stderr) sys.setrecursionlimit(10**6) MOD = 998244353 N: Final = int(input()) A: Final[list[int]] = sorted(map(int, input().split())) B: Final[list[int]] = sorted(map(int, input().split())) # ic(N) # ic(A) # ic(B) # left_acc[i] := 左から i 番目までの abs(Ai - Bi) の累積和 left_acc = [0] for a, b in zip(A, B): if len(left_acc) == 0: left_acc.append(abs(a - b)) else: left_acc.append(left_acc[-1] + abs(a - b)) # ic(left_acc) A_ = A[::-1] B_ = B[::-1] # right_acc[i] := 右から i 番目までの abs(Ai - Bi) の累積和 right_acc = [0] for a, b in zip(A_, B_): if len(right_acc) == 0: right_acc.append(abs(a - b)) else: right_acc.append(right_acc[-1] + abs(a - b)) right_acc = right_acc[::-1] # ic(right_acc) # 左から i 番目の A[i] を B と合わせなかった時のコスト cost = [0] * N for i in range(N): # ic(i) cost[i] = left_acc[i] + right_acc[i] # ic(cost) min_cost = min(cost) S = set([]) for c, a in zip(cost, A): if c == min_cost: S.add(a) # ic(S) print(len(S)) print(*sorted(S))