結果
問題 | No.518 ローマ数字の和 |
ユーザー |
![]() |
提出日時 | 2023-02-20 01:09:09 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 42 ms / 2,000 ms |
コード長 | 1,540 bytes |
コンパイル時間 | 642 ms |
コンパイル使用メモリ | 82,088 KB |
実行使用メモリ | 52,736 KB |
最終ジャッジ日時 | 2024-07-20 21:52:57 |
合計ジャッジ時間 | 1,818 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
def decode(s):s = s[::-1]pre = 0cnt = 0for i in range(len(s)):n = D[s[i]]if n >= pre:cnt += nelse:cnt -= npre = nreturn cntdef encode(m):lst = []if m >= 1000:n = m // 1000lst.extend(["M"] * n)m %= 1000if m >= 900:lst.append("C")lst.append("M")m -= 900if m >= 500:lst.append("D")m -= 500if m >= 400:lst.append("C")lst.append("D")m -= 400if m >= 100:n = m // 100lst.extend(["C"] * n)m %= 100if m >= 90:lst.append("X")lst.append("C")m -= 90if m >= 50:lst.append("L")m -= 50if m >= 40:lst.append("X")lst.append("L")m -= 40if m >= 10:n = m // 10lst.extend(["X"] * n)m %= 10if m >= 9:lst.append("I")lst.append("X")m -= 9if m >= 5:lst.append("V")m -= 5if m >= 4:lst.append("I")lst.append("V")m -= 4if m >= 1:lst.extend(["I"] * m)m %= 1return "".join(lst)N = int(input())R = list(input().split())num = [1, 5, 10, 50, 100, 500, 1000]S = ["I", "V", "X", "L", "C", "D", "M"]D = dict()for i in range(len(S)):D[S[i]] = num[i]R = list(map(decode, R))M = sum(R)if M >= 4000:print("ERROR")exit()num.reverse()S.reverse()print(encode(M))