結果
| 問題 | No.3363 Two Closest Numbers |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-01-30 04:27:41 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 238 ms / 2,000 ms |
| コード長 | 1,534 bytes |
| 記録 | |
| コンパイル時間 | 376 ms |
| コンパイル使用メモリ | 82,788 KB |
| 実行使用メモリ | 105,716 KB |
| 最終ジャッジ日時 | 2026-01-30 04:27:52 |
| 合計ジャッジ時間 | 9,338 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 59 |
ソースコード
import sys
input = sys.stdin.readline
from collections import Counter
from functools import lru_cache
@lru_cache(maxsize=None)
def calc(D):
#print(D)
if len(D)==0:
return 0
ANS=1<<60
for i in range(len(D)-1):
x=D[i]
y=D[i+1]
if x==y:
E=D[:i]+D[i+2:]
ANS=min(ANS,calc(E))
else:
E=D[:i]+D[i+2:]
#print(E)
score=0
keta=0
ix=len(E)//2-1
jx=len(E)//2
while ix>=0:
score+=E[ix]*pow(10,keta)
score-=E[jx]*pow(10,keta)
ix-=1
jx+=1
keta+=1
#print(E,score)
score+=(D[i+1]-D[i])*pow(10,keta)
#print(score)
ANS=min(ANS,score)
return ANS
mod=998244353
N=int(input())
C=list(map(int,input().split()))
C.sort()
SET=set()
ANS=1<<60
if N%2==1:
D=C[1:]
score=0
keta=0
i=len(D)//2-1
j=len(D)//2
while i>=0:
score+=D[i]*pow(10,keta,mod)
score-=D[j]*pow(10,keta,mod)
i-=1
j+=1
keta+=1
score+=C[0]*pow(10,keta,mod)
print(score%mod)
else:
C=Counter(C)
for i in range(1,10):
if C[i]>=2 and C[i]%2==0:
C[i]=2
elif C[i]>=3 and C[i]%2==1:
C[i]=3
D=[]
for c in C:
for j in range(C[c]):
D.append(c)
D.sort()
print(calc(tuple(D))%mod)
titia