結果

問題 No.3016 ハチマキおじさん
ユーザー yamasaKit_
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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))
0