結果
| 問題 |
No.518 ローマ数字の和
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 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 = 0
cnt = 0
for i in range(len(s)):
n = D[s[i]]
if n >= pre:
cnt += n
else:
cnt -= n
pre = n
return cnt
def encode(m):
lst = []
if m >= 1000:
n = m // 1000
lst.extend(["M"] * n)
m %= 1000
if m >= 900:
lst.append("C")
lst.append("M")
m -= 900
if m >= 500:
lst.append("D")
m -= 500
if m >= 400:
lst.append("C")
lst.append("D")
m -= 400
if m >= 100:
n = m // 100
lst.extend(["C"] * n)
m %= 100
if m >= 90:
lst.append("X")
lst.append("C")
m -= 90
if m >= 50:
lst.append("L")
m -= 50
if m >= 40:
lst.append("X")
lst.append("L")
m -= 40
if m >= 10:
n = m // 10
lst.extend(["X"] * n)
m %= 10
if m >= 9:
lst.append("I")
lst.append("X")
m -= 9
if m >= 5:
lst.append("V")
m -= 5
if m >= 4:
lst.append("I")
lst.append("V")
m -= 4
if m >= 1:
lst.extend(["I"] * m)
m %= 1
return "".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))
rlangevin