結果
問題 | No.518 ローマ数字の和 |
ユーザー |
![]() |
提出日時 | 2017-05-28 21:39:44 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,997 bytes |
コンパイル時間 | 741 ms |
コンパイル使用メモリ | 83,176 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-21 15:19:28 |
合計ジャッジ時間 | 1,437 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#include <string>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <map>#include <set>#include <functional>#include <cassert>typedef long long ll;using namespace std;#define debug(x) cerr << #x << " = " << (x) << endl;#define mod 1000000007 //1e9+7(prime number)#define INF 1000000000 //1e9#define LLINF 2000000000000000000LL //2e18#define SIZE 100010//I = 1、V = 5、X = 10、L = 50、C = 100、D = 500、M = 1000int tonum(string s){int sum = 0;int n = s.size();for(int i=0;i<n;i++){if(s[i] == 'I'){if(i<n-1 && (s[i+1]=='V' || s[i+1]=='X')){sum -= 1;}else{sum += 1;}}else if(s[i] == 'V'){sum += 5;}else if(s[i] == 'X'){if(i<n-1 && (s[i+1]=='L' || s[i+1]=='C')){sum -= 10;}else{sum += 10;}}else if(s[i] == 'L'){sum += 50;}else if(s[i] == 'C'){if(i<n-1 && (s[i+1]=='D' || s[i+1]=='M')){sum -= 100;}else{sum += 100;}}else if(s[i] == 'D'){sum += 500;}else if(s[i] == 'M'){sum += 1000;}}return sum;}//I = 1、V = 5、X = 10、L = 50、C = 100、D = 500、M = 1000string tostr(int num){string s[4];char a[5] = "IXCM";char b[5] = "VLD*";for(int i=0;i<4;i++){int t = num%10;num/=10;if(t==4){s[i] += a[i];s[i] += b[i];}else if(t==9){s[i] += a[i];s[i] += a[i+1];}else{if(t >= 5){s[i] += b[i];}for(int j=0;j<t%5;j++){s[i] += a[i];}}}return s[3] + s[2] + s[1] + s[0];}int main(){int n;string s;int ans = 0;cin >> n;for(int i=0;i<n;i++){cin >> s;ans += tonum(s);}if(ans >= 4000){puts("ERROR");}else{//debug(ans);cout << tostr(ans) << endl;}return 0;}