結果

問題 No.3363 Two Closest Numbers
コンテスト
ユーザー tassei903
提出日時 2025-11-17 23:57:39
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,128 bytes
コンパイル時間 350 ms
コンパイル使用メモリ 82,776 KB
実行使用メモリ 105,788 KB
最終ジャッジ日時 2025-11-17 23:57:47
合計ジャッジ時間 7,744 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1
other AC * 46 WA * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################
"""
n が偶数

桁数は同じがいい

同じ

nが奇数

- x 


"""

from itertools import permutations

def naive(n, c):
    if n == 0:
        return 0
    ans = 10 ** 18
    c = sorted(c)
    for bit in range(1 << n):
        A = []
        B = []
        for i in range(n):
            if bit >> i & 1:
                A.append(c[i])
            else:
                B.append(c[i])
        if len(A) != len(B):
            continue
        
        
        for i in range(n//2):
            for j in range(n//2):
                a = list(A)
                b = list(B)
                a.remove(A[i])
                b.remove(B[i])
                if A[i] <= B[i]:
                    x = str(A[i]) + "".join([str(x) for x in a[::-1]])
                    y = str(B[i]) + "".join([str(x) for x in b])
                else:
                    x = str(A[i]) + "".join([str(x) for x in a])
                    y = str(B[i]) + "".join([str(x) for x in b[::-1]])
                # print(x, y)
                ans = min(abs(int(x) - int(y)), ans)

    return ans

def large(m1, c):
    c = sorted(c)
    A = c[:m1]
    B = c[m1:][::-1]
    # print(A, B)
    a = 0
    for i in range(len(A)):
        a = (a * 10 + A[i]) % mod
    b = 0
    for i in range(len(B)):
        b = (b * 10 + B[i]) % mod
    return (a - b) % mod


mod = 998244353
n = ni()
c = na()

if n % 2 == 1:
    print(large((n+1)//2, c))
else:
    # assert False
    cnt = [0] * 10
    for i in range(n):
        cnt[c[i]] += 1
    
    cc = []
    for i in range(10):
        if cnt[i] % 2:
            cc.append(i)
    ans = naive(len(cc), cc)
    for i in range(10):
        dd = list(cc)
        if cnt[i] >= 2:
            ans = min(ans, naive(len(cc) + 2, dd + [i, i]))
    

    print(ans % mod)
0