結果
問題 | No.518 ローマ数字の和 |
ユーザー |
![]() |
提出日時 | 2017-05-28 23:03:53 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 39 ms / 2,000 ms |
コード長 | 4,416 bytes |
コンパイル時間 | 256 ms |
コンパイル使用メモリ | 13,184 KB |
実行使用メモリ | 11,904 KB |
最終ジャッジ日時 | 2024-09-21 15:46:58 |
合計ジャッジ時間 | 1,903 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
# coding: utf-8import array, bisect, collections, copy, heapq, itertools, math, random, re, string, sys, timesys.setrecursionlimit(10 ** 7)INF = 10 ** 20MOD = 10 ** 9 + 7def II(): return int(input())def ILI(): return list(map(int, input().split()))def IAI(LINE): return [ILI() for __ in range(LINE)]def IDI(): return {key: value for key, value in ILI()}def read():N = II()R = list(map(str, input().split()))return (N, R)def solve_roma(str):l_str = list(str)l_str.append(None)ans = 0now_ind = 0dict_roma = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}while now_ind < len(str):if l_str[now_ind + 1] is None:ans += dict_roma[l_str[now_ind]]breakif l_str[now_ind] == "I" and l_str[now_ind + 1] == "V":ans += 4now_ind += 2elif l_str[now_ind] == "I" and l_str[now_ind + 1] == "X":ans += 9now_ind += 2elif l_str[now_ind] == "X" and l_str[now_ind + 1] == "L":ans += 40now_ind += 2elif l_str[now_ind] == "X" and l_str[now_ind + 1] == "C":ans += 90now_ind += 2elif l_str[now_ind] == "C" and l_str[now_ind + 1] == "D":ans += 400now_ind += 2elif l_str[now_ind] == "C" and l_str[now_ind + 1] == "M":ans += 900now_ind += 2else:ans += dict_roma[l_str[now_ind]]now_ind += 1return ansdef solve(N, R):num_sum = 0for r in R:ret = solve_roma(r)num_sum += retans = 0if num_sum >= 4000:ans = "ERROR"else:l_ans = []l_num_sum = list(map(int, reversed(list(str(num_sum)))))for bin, num in enumerate(l_num_sum):if bin == 0:if num == 0:passelif num == 1:l_ans.append("I")elif num == 2:l_ans.append("II")elif num == 3:l_ans.append("III")elif num == 4:l_ans.append("IV")elif num == 5:l_ans.append("V")elif num == 6:l_ans.append("VI")elif num == 7:l_ans.append("VII")elif num == 8:l_ans.append("VIII")elif num == 9:l_ans.append("IX")if bin == 1:if num == 0:passelif num == 1:l_ans.append("X")elif num == 2:l_ans.append("XX")elif num == 3:l_ans.append("XXX")elif num == 4:l_ans.append("XL")elif num == 5:l_ans.append("L")elif num == 6:l_ans.append("LX")elif num == 7:l_ans.append("LXX")elif num == 8:l_ans.append("LXXX")elif num == 9:l_ans.append("XC")if bin == 2:if num == 0:passelif num == 1:l_ans.append("C")elif num == 2:l_ans.append("CC")elif num == 3:l_ans.append("CCC")elif num == 4:l_ans.append("CD")elif num == 5:l_ans.append("D")elif num == 6:l_ans.append("DC")elif num == 7:l_ans.append("DCC")elif num == 8:l_ans.append("DCCC")elif num == 9:l_ans.append("CM")if bin == 3:if num == 0:passelif num == 1:l_ans.append("M")elif num == 2:l_ans.append("MM")elif num == 3:l_ans.append("MMM")ans = "".join(reversed(l_ans))return ansdef main():params = read()print(solve(*params))if __name__ == "__main__":main()