結果

問題 No.3363 Two Closest Numbers
コンテスト
ユーザー 回転
提出日時 2025-11-17 23:07:12
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,137 bytes
コンパイル時間 366 ms
コンパイル使用メモリ 82,360 KB
実行使用メモリ 104,604 KB
最終ジャッジ日時 2025-11-17 23:07:37
合計ジャッジ時間 8,260 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 10 WA * 44 RE * 5
権限があれば一括ダウンロードができます

ソースコード

diff #

import bisect
from itertools import permutations
from collections import Counter
MOD = 998244353
N = int(input())
C = list(map(int,input().split()))

"""
def count(C):
    cc = Counter(C)
    for i in list(cc.keys()):
        cc[i] %= 2
    return sum(cc.values())

from random import randint
while(True):
    N = 2*10**5
    C = [randint(1,9) for _ in range(N)]
    print(count(C))
"""

CC = Counter(C)
for i in list(CC.keys()):
    CC[i] %= 2
    if(CC[i] == 0):CC.pop(i)
nokori = []
for i in CC:
    for _ in range(CC[i]):
        nokori.append(i)

def can_make(S):
    ret = [-1,10**18]
    for i in permutations(map(str,S)):
        ret.append(int("".join(i)))
    return sorted(ret)

N = len(nokori)
ans = 10**18
for i in range(1,1<<N-1):
    a,b = [],[]
    for j in range(N):
        if(i>>j & 1 == 0):
            a.append(nokori[j])
        else:
            b.append(nokori[j])
    
    ca = can_make(a)
    cb = can_make(b)
    
    for i in ca[1:-1]:
        left = bisect.bisect_right(cb,i) - 1
        right = bisect.bisect_left(cb,i)
        
        ans = min(ans, abs(i - cb[left]), abs(i - cb[right]))
print(ans % MOD)
0