问题 2046. -- 罗马数字

2046: 罗马数字

时间限制: 1 Sec  内存限制: 128 MB
提交: 1  解决: 1
[上一题][提交][讨论版][状态][下一题]

题目描述

一类书的序言是以罗马数字标页码的。传统罗马数字用单个字母表示特定的数值,以下是标准数字表: 

I  1    L  50    M  1000
V  5    C  100
X  10  D  500
最多3个同样的可以表示为10n的数字(I,X,C,M)可以连续放在一起,表示它们的和: 

III=3
CCC=300
可表示为5x10n的字符(V,L,D)从不连续出现。 

除了下一个规则,一般来说,字符以递减的顺序接连出现: 

CCLXVIII  =  100+100+50+10+5+1+1+1  =  268
有时,一个可表示为10n的数出现在一个比它大1级或2级的数前(I在V或X前面,X在L或C前面,等等)。在这种情况下,数值等于后面的那个数减去前面的那个数: 

IV  =  4
IX  =  9
XL  =  40
This  compound  mark  forms  a  unit  and  may  not  be  combined  to  make  another  compound  mark  (e.g.,  IXL  is  wrong  for  39;  XXXIX  is  correct). 

像XD,  IC,  和XM这样的表达是非法的,因为前面的数比后面的数小太多。对于XD(490的错误表达),可以写成  CDXC;  对于IC(99的错误表达),可以写成XCIX;  对于XM(990的错误表达),可以写成CMXC。  90  is  expressed  XC  and  not  LXL,  since  L  followed  by  X  connotes  that  successive  marks  are  X  or  smaller  (probably,  anyway). 


给定N(1  < =  N  <   3,500),  序言的页码数,请统计在第1页到第N页中,有几个I出现,几个V出现,等等  (从小到大的顺序)。不要输出并没有出现过的字符。 

比如N  =  5,  那么页码数为:  I,  II,  III,  IV,  V.  总共有7个I出现,2个V出现。 

输入 [lmsz.in]

一个整数N。 

输出 [lmsz.out]

每行一个字符和一个数字k,表示这个字符出现了k次。字符必须按数字表中的递增顺序输出。 

样例输入

5

样例输出

I 7
V 2

提示

标签

[上一题][提交][讨论版][状态][下一题]