結果
問題 | No.518 ローマ数字の和 |
ユーザー | snrnsidy |
提出日時 | 2021-07-15 21:59:18 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,516 bytes |
コンパイル時間 | 2,660 ms |
コンパイル使用メモリ | 212,356 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-04 23:10:00 |
合計ジャッジ時間 | 3,187 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | AC | 2 ms
5,376 KB |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 2 ms
5,376 KB |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; map <string, int> m; int convert(string s) { int n = s.length(); int val = 0; int idx = 0; while (idx < n) { if (s[idx] == 'I') { if (s.substr(idx, 2) == "IV") { val += m[s.substr(idx, 2)]; idx += 2; } else if (s.substr(idx, 2) == "IX") { val += m[s.substr(idx, 2)]; idx += 2; } else { val += m[s.substr(idx, 1)]; idx++; } } else if (s[idx] == 'X') { if (s.substr(idx, 2) == "XL") { val += m[s.substr(idx, 2)]; idx += 2; } else if (s.substr(idx, 2) == "XC") { val += m[s.substr(idx, 2)]; idx += 2; } else { val += m[s.substr(idx, 1)]; idx++; } } else if (s[idx] == 'C') { if (s.substr(idx, 2) == "CD") { val += m[s.substr(idx, 2)]; idx += 2; } else if (s.substr(idx, 2) == "CM") { val += m[s.substr(idx, 2)]; idx += 2; } else { val += m[s.substr(idx, 1)]; idx++; } } else { val += m[s.substr(idx, 1)]; idx++; } } return val; } string convert2(int num) { string res; while (num > 0) { if (num >= 1000) { num -= 1000; res += "M"; } else if (num >= 900 && num < 1000) { num -= 900; res += "CM"; } else if (num >= 500 && num < 900) { num -= 500; res += "D"; } else if (num >= 400 && num < 500) { num -= 400; res += "CD"; } else if (num >= 100 && num < 400) { num -= 100; res += "C"; } else if (num >= 90 && num < 100) { num -= 90; res += "XC"; } else if (num >= 50 && num < 90) { num -= 50; res += "L"; } else if (num >= 40 && num < 50) { num -= 40; res += "XL"; } else if (num >= 10 && num < 40) { num -= 10; res += "X"; } else if (num >= 9 && num < 10) { num -= 9; res += "IX"; } else if (num >= 5 && num < 9) { num -= 5; res += "V"; } else if (num >= 4 && num < 5) { num -= 4; res += "IV"; } else { num -= 1; res += "I"; } } return res; } int main(void) { m["I"] = 1; m["V"] = 5; m["X"] = 10; m["L"] = 50; m["C"] = 100; m["D"] = 500; m["M"] = 1000; m["IV"] = 4; m["IX"] = 9; m["XL"] = 40; m["XC"] = 90; m["CD"] = 400; m["CM"] = 900; cin.tie(0); ios::sync_with_stdio(false); int res = 0; int n; string a; cin >> n; for (int i = 0; i < n; i++) { cin >> a; res += convert(a); } if (res >= 4000) { cout << "ERROR" << '\n'; } else { cout << convert2(res) << '\n'; } return 0; }