結果

問題 No.518 ローマ数字の和
コンテスト
ユーザー vjudge1
提出日時 2025-10-19 21:58:31
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,771 bytes
コンパイル時間 8,041 ms
コンパイル使用メモリ 211,892 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-10-19 21:58:41
合計ジャッジ時間 9,408 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13 WA * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,ans;
string s;
int main(){
    // freopen("roman.in","r",stdin);
    // freopen("roman.out","w",stdout);
    cin>>n;
    for(int u=1;u<=n;u++){
        cin>>s;
        int num=0;
        for(int i=0;i<s.size();i++){
            bool flg=false;
            if(i!=s.size()-1){
                if(s[i]=='I'&&s[i+1]=='V') num+=4,flg=true;
                if(s[i]=='I'&&s[i+1]=='X') num+=9,flg=true;
                if(s[i]=='X'&&s[i+1]=='L') num+=40,flg=true;
                if(s[i]=='X'&&s[i+1]=='C') num+=90,flg=true;
                if(s[i]=='C'&&s[i+1]=='D') num+=400,flg=true;
                if(s[i]=='C'&&s[i+1]=='M') num+=900,flg=true;
            }
            if(!flg){
                if(s[i]=='I') num++;
                if(s[i]=='V') num+=5;
                if(s[i]=='X') num+=10;
                if(s[i]=='L') num+=50;
                if(s[i]=='C') num+=100;
                if(s[i]=='D') num+=500;
                if(s[i]=='M') num+=1000;
            }else i++;
        }
        ans+=num;
    }
    if(ans>=4000){
        puts("ERROR");
        return 0;
    }
    string out="";
    if(ans==900){
        out+="CM";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=1000){
        ans-=1000;
        out+='M';
        if(ans==900){
            out+="CM";
            cout<<out<<endl;
            return 0;
        }
    }
    if(ans==400){
        out+="CD";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=500){
        ans-=500;
        out+='D';
        if(ans==400){
            out+="CD";
            cout<<out<<endl;
            return 0;
        }
    }
    if(ans==90){
        out+="XC";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=100){
        ans-=100;
        out+='C';
        if(ans==90){
            out+="XC";
            cout<<out<<endl;
            return 0;
        }
    }
    if(ans==40){
        out+="XL";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=50){
        ans-=50;
        out+='L';
        if(ans==40){
            out+="XL";
            cout<<out<<endl;
            return 0;
        }
    }
    if(ans==9){
        out+="IX";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=10){
        ans-=10;
        out+='X';
        if(ans==9){
            out+="IX";
            cout<<out<<endl;
            return 0;
        }
    }
    if(ans==4){
        out+="IV";
        cout<<out<<endl;
        return 0;
    }
    while(ans>=5){
        ans-=5;
        out+='V';
        if(ans==4){
            out+="IV";
            cout<<out<<endl;
            return 0;
        }
    }
    while(ans>=1){
        ans-=1;
        out+='I';
    }
    cout<<out<<endl;
    return 0;
}
0