#P1213. Roman Numerals
Roman Numerals
描述
早期罗马人使用的数字书写系统简单但繁琐。他们用特定字母表示重要数字,并将这些字母按从左到右数值递减的顺序组合以表示其他数字。使用的字母及其对应数值如下表所示:
I | 1 | V | 5 | |
X | 10 | L | 50 | |
C | 100 | D | 500 | |
M | 1000 |
例如,最初被写作。后来,该系统被部分位置导向的系统取代:如果数值递减的规则被打破,则前一个(较小)数值被视为并被从后一个(较大)数值中减去。关于哪些字母可以出现在其他字母之前,目前仍存在争议,但在此问题中,我们假设以下限制条件:
1.左列字母不能连续出现超过三次,且该字母的其他出现次数不得超过一次。
2.右列字母最多只能出现一次。
3.如果一个字母被用作位置,则其后的所有字母(紧随其后的字母除外)不能大于该字母。
因此, 可以写作 , 可以写作 ,但 不能写作 , 不能写作 。注意, 可以写作 或 。
给定一个罗马数字算式,我们可以将其视为罗马数字的运算结果,也可以视为阿拉伯数字的编码。例如, 可以解释为阿拉伯数字的模糊编码,其中 { } 。类似地, 可以视为正确的罗马数字算式,但阿拉伯数字编码不可能成立(除非 的平凡情况);而 是一个错误的罗马数字算式,但可以是一个有效的编码,其中 。
请编写一个程序,读取罗马数字算式,判断其作为罗马数字算式是否正确,并判断其作为阿拉伯数字编码是否不可能、模糊或有效。假设阿拉伯数字的零不会单独出现或作为前导数字,且不同的罗马数字不会映射到相同的阿拉伯数字。
输入
输入由多行组成,每行是一个罗马数字表达式,格式为: 每个罗马数字不超过个字母。输入以 # 结束。
输出
输出由多行组成,每行对应输入的一行,包含两个单词。第一个单词为 Correct 或 Incorrect,表示罗马数字算式是否正确;第二个单词与第一个单词之间用一个空格隔开,为 impossible、ambiguous 或 valid,表示阿拉伯数字编码的可能性。
V+V=X
X+X=XX
XX+XX=MXC
#
Correct ambiguous
Correct impossible
Incorrect valid
来源
南太平洋 1993,uva 185