close

185 Toman Numerals

        早期羅馬人使用的最原始的書寫數字非常的簡單但是卻很麻煩。許多字母被用來代表一些重要的數字,且這些字母被綁在一起時可以代表另外一個數字(這些綁在一起的字母,其值是從左至右單純地遞減)。他們用的字母和代表的數值列在下表:

                                        I       1                V     5

                                        X     10              L      50

                                        C     100            D     500

                                        M     1000                        

        因此,1993這個數字用羅馬數字表示即為MDCCCCLXXXXIII。這個系統後來被一個部份改變的系統所取代,這個改變的地方就是上面提到的遞減規則被打破了:較低的數值放在較前面,它代表的意義便是負的,並且會從他的下一位較高的數值減去它的值。在這個系統中,1993便常被寫成MCMXCIII。至於什麼字母可以放在其他的字母前仍是有爭議的,但是為了這題的目的我們假定了下述的限制:

        1.表格左欄的字母不能出現在一列中出現三次以上,而出現三次的字母只能在其他地方至多出現一次。

        2.表格右欄的字母不能出現超過一次。

        3.當一個字母被用在「負」的位置時,所有接下來的字母(除了它的下一個之外)都不能比這個字母大。

        所以,我們可以把1993寫成MXMIII或是把294寫成CCXCIV,然而,我們不能把54寫成ILV或是把99寫成LIL。記住299可以被寫成CCXCIXCCIC

        給一個羅馬數字的加法,我們可以把它解釋成羅馬數字,或是轉成一個阿拉伯的加法。因此V+V=X可以被解釋成一個含糊不清的加法:當V屬於{1,2,3,4}X=2*V時,上式皆成立。同樣地,X+X=XX可以被解釋成一個正確的羅馬數字加法,但是我們不可能找到一個對應的阿拉伯數字使得上式成立(除了把X定義成0之外)。而XX+XX=MXC是一個不正確的羅馬數字加法,但是他卻能夠有效地被轉成阿拉伯數字後使得等式成立。(此時M=1,X=9,C,也就是99+99=198)

        寫支程式來讀取羅馬數字加法,然後判斷他們是否是正確的羅馬數字加法,並且判斷能否找到一組正確的轉碼將之轉成阿拉伯數字的加法後成立(不可能即為impossible,多組可能為ambiguous,唯一解為valid)。並且我們假設數字開頭的字母不可能代表0,且一個字母只能代表一個數字。

Input

        輸入包含許多行,每一行由一個格式正確無誤的羅馬數字加法所組成,換言之,即為一個有效的羅馬數字,一個+號,另一個有效的羅馬數字,一個=號,另一個有效的羅馬數字這些所組成。沒有羅馬數字的長度會大於9個字母長,而輸入檔案的最後將會由單獨包括#的一行所組成。

Output

        輸出包括許多行,每一行對應一行輸入,且每一行包含了兩個字。第一個字應為(Correct, Incorrect)的其中之一,代表羅馬數字加法是否正確。第二個字與第一個字之間空一格,且為(impossible, ambiguous, valid)的其中之一,代表(無、有不只一組、有唯一)轉碼正確的阿拉伯數字加法。

 

Sample input 

 

V+V=X

X+X=XX

XX+XX=MXC

#

 

Sample output 

 

Correct ambiguous

Correct impossible

Incorrect valid

arrow
arrow
    全站熱搜

    aikosenoo 發表在 痞客邦 留言(0) 人氣()