結果
問題 | No.518 ローマ数字の和 |
ユーザー |
![]() |
提出日時 | 2020-01-29 17:31:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,573 bytes |
コンパイル時間 | 2,082 ms |
コンパイル使用メモリ | 179,824 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-16 01:44:27 |
合計ジャッジ時間 | 2,632 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#include <bits/stdc++.h>using namespace std;string dec2rome(int n) {if (n >= 1000) {return "M" + dec2rome(n - 1000);} else if (n >= 900) {return "CM" + dec2rome(n - 900);} else if (n >= 500) {return "D" + dec2rome(n - 500);} else if (n >= 400) {return "CD" + dec2rome(n - 400);} else if (n >= 100) {return "C" + dec2rome(n - 100);} else if (n >= 90) {return "XC" + dec2rome(n - 90);} else if (n >= 50) {return "L" + dec2rome(n - 50);} else if (n >= 40) {return "XL" + dec2rome(n - 40);} else if (n >= 10) {return "X" + dec2rome(n - 10);} else if (n >= 9) {return "IX" + dec2rome(n - 9);} else if (n >= 5) {return "V" + dec2rome(n - 5);} else if (n >= 4) {return "IV" + dec2rome(n - 4);} else if (n >= 1) {return "I" + dec2rome(n - 1);} else {return "";}}int rome2dec(string s) {map<char, int> m;m['I'] = 1;m['V'] = 5;m['X'] = 10;m['L'] = 50;m['C'] = 100;m['D'] = 500;m['M'] = 1000;int ans = 0, prev = 0;for (char c : s) {ans += m[c];if (m[c] > prev) ans -= 2 * prev;prev = m[c];}return ans;}int main() {int n, ans = 0;cin >> n;for (int i = 0; i < n; i++) {string r;cin >> r;ans += rome2dec(r);}if (ans >= 4000) {cout << "ERROR" << endl;return 0;} else {cout << dec2rome(ans) << endl;}}