結果
| 問題 |
No.518 ローマ数字の和
|
| コンテスト | |
| ユーザー |
CELICA
|
| 提出日時 | 2020-09-24 21:49:52 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,748 bytes |
| コンパイル時間 | 2,235 ms |
| コンパイル使用メモリ | 190,612 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-28 05:25:18 |
| 合計ジャッジ時間 | 3,232 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ul = unsigned long;
using ull = unsigned long long;
string encode(string s)
{
vector<string> vs = { "IV","IX","XL","XC","CD","CM" };
vector<string> vd = { "IIII","VIIII","XXXX","XXXXL","CCCC","CCCCD" };
string ss{ s };
for (unsigned i = 0; i < vs.size(); ++i)
{
size_t pos = 0;
while ((pos = ss.find(vs[i], pos)) != string::npos)
{
ss.replace(pos, vs[i].length(), vd[i]);
pos += vd[i].length();
}
}
return ss;
}
string decode(string s)
{
vector<string> vs = { "CM","CD","XC","XL","IX","IV" };
vector<string> vd = { "CCCCD","CCCC","XXXXL","XXXX","VIIII","IIII" };
string ss{ s };
for (unsigned i = 0; i < vs.size(); ++i)
{
size_t pos = 0;
while ((pos = ss.find(vd[i], pos)) != string::npos)
{
ss.replace(pos, vd[i].length(), vs[i]);
pos += vs[i].length();
}
}
return ss;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<string> r(n);
for (auto&& it : r)
{
string s;
cin >> s;
it = encode(s);
}
vector<int> v = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
map<char, int> me = { {'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000} };
map<int, string> md = { {1,"I"},{4,"IV"},{5,"V"},{9,"IX"},{10,"X"},{40,"XL"},{50,"L"},{90,"XC"},{100,"C"},{400,"CD"},{500,"D"},{900,"CM"},{1000,"M"} };
int sum{ 0 };
for (const auto& it : r)
{
for (const auto& it2 : it)
sum += me[it2];
}
string res;
if (sum > 3999)
res = "ERROR";
else
{
for (const auto& it : v)
{
int d = sum / it;
if (d)
{
for (int i = 0; i < d; ++i)
res += md[it];
sum -= it * d;
}
}
res = decode(res);
}
cout << res << "\n";
return 0;
}
CELICA