結果
問題 | No.518 ローマ数字の和 |
ユーザー | yuppe19 😺 |
提出日時 | 2017-05-28 22:24:50 |
言語 | Python2 (2.7.18) |
結果 |
AC
|
実行時間 | 14 ms / 2,000 ms |
コード長 | 1,279 bytes |
コンパイル時間 | 58 ms |
コンパイル使用メモリ | 6,940 KB |
実行使用メモリ | 6,912 KB |
最終ジャッジ日時 | 2024-09-21 15:35:15 |
合計ジャッジ時間 | 1,314 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 13 ms
6,912 KB |
testcase_01 | AC | 13 ms
6,912 KB |
testcase_02 | AC | 12 ms
6,784 KB |
testcase_03 | AC | 12 ms
6,912 KB |
testcase_04 | AC | 12 ms
6,784 KB |
testcase_05 | AC | 12 ms
6,784 KB |
testcase_06 | AC | 12 ms
6,912 KB |
testcase_07 | AC | 12 ms
6,912 KB |
testcase_08 | AC | 12 ms
6,912 KB |
testcase_09 | AC | 12 ms
6,784 KB |
testcase_10 | AC | 13 ms
6,784 KB |
testcase_11 | AC | 12 ms
6,912 KB |
testcase_12 | AC | 13 ms
6,784 KB |
testcase_13 | AC | 13 ms
6,912 KB |
testcase_14 | AC | 12 ms
6,912 KB |
testcase_15 | AC | 14 ms
6,912 KB |
testcase_16 | AC | 12 ms
6,912 KB |
testcase_17 | AC | 12 ms
6,912 KB |
testcase_18 | AC | 12 ms
6,784 KB |
testcase_19 | AC | 12 ms
6,912 KB |
testcase_20 | AC | 12 ms
6,912 KB |
testcase_21 | AC | 12 ms
6,912 KB |
ソースコード
#!/usr/bin/python2 # -*- coding: utf-8 -*- # † from collections import namedtuple from itertools import groupby T = namedtuple('T', 'num, cnt') v = ['IV', 'XL', 'CD', 'M-'] num_letter = {10**i * [1,5][j]: ch for i, s in enumerate(v) for j, ch in enumerate(s)} letter_num = {v: k for k, v in num_letter.items()} def create(n): arr = [] d = 0 while n > 0: x = n % 10 if x == 9: arr.append(v[d][0] + v[d+1][0]) elif x == 4: arr.append(v[d]) else: p, q = divmod(x, 5) arr.append(v[d][1] * p + v[d][0] * q) n //= 10 d += 1 arr = [s.replace('M-', 'MMMM') for s in arr] return ''.join(reversed(arr)) def parse(s): grp = [T(k, len(list(g))) for k, g in groupby(letter_num[ch] for ch in s)] n = len(grp) i = 0 res = 0 while i < n: if i+1 < n and grp[i].num < grp[i+1].num: assert grp[i].cnt == 1 and grp[i+1].cnt == 1 res += grp[i+1].num - grp[i].num i += 1 else: res += grp[i].num * grp[i].cnt i += 1 return res ### n = int(raw_input()) line = raw_input() summ = sum(map(parse, line.split())) if summ > 3999: print 'ERROR' exit(0) res = create(summ) print res