#P1213. Roman Numerals

    ID: 214 传统题 1000ms 256MiB 尝试: 3 已通过: 1 难度: 10 上传者: 标签>模拟深度优先搜索(DFS)罗马数字转换South Pacific 1993uva 185

Roman Numerals

描述

早期罗马人使用的数字书写系统简单但繁琐。他们用特定字母表示重要数字,并将这些字母按从左到右数值递减的顺序组合以表示其他数字。使用的字母及其对应数值如下表所示:


I 1        V 5
X 10        L 50
C 100        D 500
M 1000           

例如,19931993 最初被写作MDCCCCLXXXXIIIMDCCCCLXXXXIII。后来,该系统被部分位置导向的系统取代:如果数值递减的规则被打破,则前一个(较小)数值被视为“负”“负”并被从后一个(较大)数值中减去。关于哪些字母可以出现在其他字母之前,目前仍存在争议,但在此问题中,我们假设以下限制条件:

1.左列字母不能连续出现超过三次,且该字母的其他出现次数不得超过一次。

2.右列字母最多只能出现一次。

3.如果一个字母被用作“负”“负”位置,则其后的所有字母(紧随其后的字母除外)不能大于该字母。

因此,19931993 可以写作 MXMIIIMXMIII294294 可以写作 CCXCIVCCXCIV,但 5454 不能写作 ILVILV9999 不能写作 LILLIL。注意,299299 可以写作 CCXCIXCCXCIXCCICCCIC

给定一个罗马数字算式,我们可以将其视为罗马数字的运算结果,也可以视为阿拉伯数字的编码。例如,V+V=XV+V=X 可以解释为阿拉伯数字的模糊编码,其中 VV {11,, 22,, 33,, 44}XX == 22 * VV。类似地,X+X=XXX+X=XX 可以视为正确的罗马数字算式,但阿拉伯数字编码不可能成立(除非 X=0X = 0 的平凡情况);而 XX+XX=MXCXX+XX=MXC 是一个错误的罗马数字算式,但可以是一个有效的编码,其中 M=1M = 1X=9X = 9C=8C = 8

请编写一个程序,读取罗马数字算式,判断其作为罗马数字算式是否正确,并判断其作为阿拉伯数字编码是否不可能、模糊或有效。假设阿拉伯数字的零不会单独出现或作为前导数字,且不同的罗马数字不会映射到相同的阿拉伯数字。

输入

输入由多行组成,每行是一个罗马数字表达式,格式为: 罗马数字+罗马数字=罗马数字罗马数字 + 罗马数字 = 罗马数字 每个罗马数字不超过9 9 个字母。输入以 # 结束。

输出

输出由多行组成,每行对应输入的一行,包含两个单词。第一个单词为 Correct 或 Incorrect,表示罗马数字算式是否正确;第二个单词与第一个单词之间用一个空格隔开,为 impossible、ambiguous 或 valid,表示阿拉伯数字编码的可能性。

V+V=X
X+X=XX
XX+XX=MXC
#
Correct ambiguous
Correct impossible
Incorrect valid

来源

南太平洋 1993,uva 185