鱼C论坛

 找回密码
 立即注册
查看: 3017|回复: 3

题目89:将罗马数字表达为最简式

[复制链接]
发表于 2016-8-10 18:11:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Roman numerals

For a number written in Roman numerals to be considered valid there are basic rules which must be followed. Even though the rules allow some numbers to be expressed in more than one way there is always a "best" way of writing a particular number.

For example, it would appear that there are at least six ways of writing the number sixteen:

QQ20160810-1@2x.png


However, according to the rules only XIIIIII and XVI are valid, and the last example is considered to be the most efficient, as it uses the least number of numerals.

The 11K text file, roman.txt (right click and 'Save Link/Target As...'), contains one thousand numbers written in valid, but not necessarily minimal, Roman numerals; see About... Roman Numerals for the definitive rules for this problem.

Find the number of characters saved by writing each of these in their minimal form.

Note: You can assume that all the Roman numerals in the file contain no more than four consecutive identical units.


题目:

罗马数字的书写规则允许一个数字被用多种方式表达(具体见 Roman Numerals)。但是,对于每个数字都存在一种“最佳”书写方式。

例如,以下是数字 16 的所有合法书写形式。

QQ20160810-1@2x.png


最后一种写法是最高效的,因为它使用了最少的数字。

p089_roman.txt (9.62 KB, 下载次数: 11) 包含了一千个罗马数字,但不一定是最简形式;也就是说它们都遵循单位递减规则和相减对规则(具体见FAQ)。

找出将所有数字写成最简式一共节省的字符数。

注意:你可以认为文件中所有的每个罗马数字中同一单位的字符最多连续出现4次。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-18 09:57:38 | 显示全部楼层
743
[Finished in 0.1s]
X=((b'IIII',2),(b'XXXX',2),(b'CCCC',2),(b'VIIII',1),(b'LXXXX',1),(b'DCCCC',1))
s = 'MMMMDCLXXII\r\nMMDCCCLXXXIII\r\nMMMDLXVIIII\r\nMMMMDXCV\r\nDCCCLXXII\r\nMMCCCVI\r\nMMMCDLXXXVII\r\nMMMMCCXXI\r\nMMMCCXX\r\nMMMMDCCCLXXIII\r\nMMMCCXXXVII\r\nMMCCCLXXXXIX\r\nMDCCCXXIIII\r\nMMCXCVI\r\nCCXCVIII\r\nMMMCCCXXXII\r\nMDCCXXX\r\nMMMDCCCL\r\nMMMMCCLXXXVI\r\nMMDCCCXCVI\r\nMMMDCII\r\nMMMCCXII\r\nMMMMDCCCCI\r\nMMDCCCXCII\r\nMDCXX\r\nCMLXXXVII\r\nMMMXXI\r\nMMMMCCCXIV\r\nMLXXII\r\nMCCLXXVIIII\r\nMMMMCCXXXXI\r\nMMDCCCLXXII\r\nMMMMXXXI\r\nMMMDCCLXXX\r\nMMDCCCLXXIX\r\nMMMMLXXXV\r\nMCXXI\r\nMDCCCXXXVII\r\nMMCCCLXVII\r\nMCDXXXV\r\nCCXXXIII\r\nCMXX\r\nMMMCLXIV\r\nMCCCLXXXVI\r\nDCCCXCVIII\r\nMMMDCCCCXXXIV\r\nCDXVIIII\r\nMMCCXXXV\r\nMDCCCXXXII\r\nMMMMD\r\nMMDCCLXIX\r\nMMMMCCCLXXXXVI\r\nMMDCCXLII\r\nMMMDCCCVIIII\r\nDCCLXXXIIII\r\nMDCCCCXXXII\r\nMMCXXVII\r\nDCCCXXX\r\nCCLXIX\r\nMMMXI\r\nMMMMCMLXXXXVIII\r\nMMMMDLXXXVII\r\nMMMMDCCCLX\r\nMMCCLIV\r\nCMIX\r\nMMDCCCLXXXIIII\r\nCLXXXII\r\nMMCCCCXXXXV\r\nMMMMDLXXXVIIII\r\nMMMDCCCXXI\r\nMMDCCCCLXXVI\r\nMCCCCLXX\r\nMMCDLVIIII\r\nMMMDCCCLIX\r\nMMMMCCCCXIX\r\nMMMDCCCLXXV\r\nXXXI\r\nCDLXXXIII\r\nMMMCXV\r\nMMDCCLXIII\r\nMMDXXX\r\nMMMMCCCLVII\r\nMMMDCI\r\nMMMMCDLXXXIIII\r\nMMMMCCCXVI\r\nCCCLXXXVIII\r\nMMMMCML\r\nMMMMXXIV\r\nMMMCCCCXXX\r\nDCCX\r\nMMMCCLX\r\nMMDXXXIII\r\nCCCLXIII\r\nMMDCCXIII\r\nMMMCCCXLIV\r\nCLXXXXI\r\nCXVI\r\nMMMMCXXXIII\r\nCLXX\r\nDCCCXVIII\r\nMLXVII\r\nDLXXXX\r\nMMDXXI\r\nMMMMDLXXXXVIII\r\nMXXII\r\nLXI\r\nDCCCCXLIII\r\nMMMMDV\r\nMMMMXXXIV\r\nMDCCCLVIII\r\nMMMCCLXXII\r\nMMMMDCCXXXVI\r\nMMMMLXXXIX\r\nMDCCCLXXXI\r\nMMMMDCCCXV\r\nMMMMCCCCXI\r\nMMMMCCCLIII\r\nMDCCCLXXI\r\nMMCCCCXI\r\nMLXV\r\nMMCDLXII\r\nMMMMDXXXXII\r\nMMMMDCCCXL\r\nMMMMCMLVI\r\nCCLXXXIV\r\nMMMDCCLXXXVI\r\nMMCLII\r\nMMMCCCCXV\r\nMMLXXXIII\r\nMMMV\r\nMMMV\r\nDCCLXII\r\nMMDCCCCXVI\r\nMMDCXLVIII\r\nCCLIIII\r\nCCCXXV\r\nMMDCCLXXXVIIII\r\nMMMMDCLXXVIII\r\nMMMMDCCCXCI\r\nMMMMCCCXX\r\nMMCCXLV\r\nMMMDCCCLXIX\r\nMMCCLXIIII\r\nMMMDCCCXLIX\r\nMMMMCCCLXIX\r\nCMLXXXXI\r\nMCMLXXXIX\r\nMMCDLXI\r\nMMDCLXXVIII\r\nMMMMDCCLXI\r\nMCDXXV\r\nDL\r\nCCCLXXII\r\nMXVIIII\r\nMCCCCLXVIII\r\nCIII\r\nMMMDCCLXXIIII\r\nMMMDVIII\r\nMMMMCCCLXXXXVII\r\nMMDXXVII\r\nMMDCCLXXXXV\r\nMMMMCXLVI\r\nMMMDCCLXXXII\r\nMMMDXXXVI\r\nMCXXII\r\nCLI\r\nDCLXXXIX\r\nMMMCLI\r\nMDCLXIII\r\nMMMMDCCXCVII\r\nMMCCCLXXXV\r\nMMMDCXXVIII\r\nMMMCDLX\r\nMMMCMLII\r\nMMMIV\r\nMMMMDCCCLVIII\r\nMMMDLXXXVIII\r\nMCXXIV\r\nMMMMLXXVI\r\nCLXXIX\r\nMMMCCCCXXVIIII\r\nDCCLXXXV\r\nMMMDCCCVI\r\nLI\r\nCLXXXVI\r\nMMMMCCCLXXVI\r\nMCCCLXVI\r\nCCXXXIX\r\nMMDXXXXI\r\nMMDCCCXLI\r\nDCCCLXXXVIII\r\nMMMMDCCCIV\r\nMDCCCCXV\r\nMMCMVI\r\nMMMMCMLXXXXV\r\nMMDCCLVI\r\nMMMMCCXLVIII\r\nDCCCCIIII\r\nMMCCCCIII\r\nMMMDCCLXXXVIIII\r\nMDCCCLXXXXV\r\nDVII\r\nMMMV\r\nDCXXV\r\nMMDCCCXCV\r\nDCVIII\r\nMMCDLXVI\r\nMCXXVIII\r\nMDCCXCVIII\r\nMMDCLX\r\nMMMDCCLXIV\r\nMMCDLXXVII\r\nMMDLXXXIIII\r\nMMMMCCCXXII\r\nMMMDCCCXLIIII\r\nDCCCCLXVII\r\nMMMCLXXXXIII\r\nMCCXV\r\nMMMMDCXI\r\nMMMMDCLXXXXV\r\nMMMCCCLII\r\nMMCMIX\r\nMMDCCXXV\r\nMMDLXXXVI\r\nMMMMDCXXVIIII\r\nDCCCCXXXVIIII\r\nMMCCXXXIIII\r\nMMDCCLXXVIII\r\nMDCCLXVIIII\r\nMMCCLXXXV\r\nMMMMDCCCLXXXVIII\r\nMMCMXCI\r\nMDXLII\r\nMMMMDCCXIV\r\nMMMMLI\r\nDXXXXIII\r\nMMDCCXI\r\nMMMMCCLXXXIII\r\nMMMDCCCLXXIII\r\nMDCLVII\r\nMMCD\r\nMCCCXXVII\r\nMMMMDCCIIII\r\nMMMDCCXLVI\r\nMMMCLXXXVII\r\nMMMCCVIIII\r\nMCCCCLXXIX\r\nDL\r\nDCCCLXXVI\r\nMMDXCI\r\nMMMMDCCCCXXXVI\r\nMMCII\r\nMMMDCCCXXXXV\r\nMMMCDXLV\r\nMMDCXXXXIV\r\nMMD\r\nMDCCCLXXXX\r\nMMDCXLIII\r\nMMCCXXXII\r\nMMDCXXXXVIIII\r\nDCCCLXXI\r\nMDXCVIIII\r\nMMMMCCLXXVIII\r\nMDCLVIIII\r\nMMMCCCLXXXIX\r\nMDCLXXXV\r\nMDLVIII\r\nMMMMCCVII\r\nMMMMDCXIV\r\nMMMCCCLXIIII\r\nMMIIII\r\nMMMMCCCLXXIII\r\nCCIII\r\nMMMCCLV\r\nMMMDXIII\r\nMMMCCCXC\r\nMMMDCCCXXI\r\nMMMMCCCCXXXII\r\nCCCLVI\r\nMMMCCCLXXXVI\r\nMXVIIII\r\nMMMCCCCXIIII\r\nCLXVII\r\nMMMCCLXX\r\nCCCCLXIV\r\nMMXXXXII\r\nMMMMCCLXXXX\r\nMXL\r\nCCXVI\r\nCCCCLVIIII\r\nMMCCCII\r\nMCCCLVIII\r\nMMMMCCCX\r\nMCDLXXXXIV\r\nMDCCCXIII\r\nMMDCCCXL\r\nMMMMCCCXXIII\r\nDXXXIV\r\nCVI\r\nMMMMDCLXXX\r\nDCCCVII\r\nMMCMLXIIII\r\nMMMDCCCXXXIII\r\nDCCC\r\nMDIII\r\nMMCCCLXVI\r\nMMMCCCCLXXI\r\nMMDCCCCXVIII\r\nCCXXXVII\r\nCCCXXV\r\nMDCCCXII\r\nMMMCMV\r\nMMMMCMXV\r\nMMMMDCXCI\r\nDXXI\r\nMMCCXLVIIII\r\nMMMMCMLII\r\nMDLXXX\r\nMMDCLXVI\r\nCXXI\r\nMMMDCCCLIIII\r\nMMMCXXI\r\nMCCIII\r\nMMDCXXXXI\r\nCCXCII\r\nMMMMDXXXV\r\nMMMCCCLXV\r\nMMMMDLXV\r\nMMMCCCCXXXII\r\nMMMCCCVIII\r\nDCCCCLXXXXII\r\nMMCLXIV\r\nMMMMCXI\r\nMLXXXXVII\r\nMMMCDXXXVIII\r\nMDXXII\r\nMLV\r\nMMMMDLXVI\r\nMMMCXII\r\nXXXIII\r\nMMMMDCCCXXVI\r\nMMMLXVIIII\r\nMMMLX\r\nMMMCDLXVII\r\nMDCCCLVII\r\nMMCXXXVII\r\nMDCCCCXXX\r\nMMDCCCLXIII\r\nMMMMDCXLIX\r\nMMMMCMXLVIII\r\nDCCCLXXVIIII\r\nMDCCCLIII\r\nMMMCMLXI\r\nMMMMCCLXI\r\nMMDCCCLIII\r\nMMMDCCCVI\r\nMMDXXXXIX\r\nMMCLXXXXV\r\nMMDXXX\r\nMMMXIII\r\nDCLXXIX\r\nDCCLXII\r\nMMMMDCCLXVIII\r\nMDCCXXXXIII\r\nCCXXXII\r\nMMMMDCXXV\r\nMMMCCCXXVIII\r\nMDCVIII\r\nMMMCLXXXXIIII\r\nCLXXXI\r\nMDCCCCXXXIII\r\nMMMMDCXXX\r\nMMMDCXXIV\r\nMMMCCXXXVII\r\nMCCCXXXXIIII\r\nCXVIII\r\nMMDCCCCIV\r\nMMMMCDLXXV\r\nMMMDLXIV\r\nMDXCIII\r\nMCCLXXXI\r\nMMMDCCCXXIV\r\nMCXLIII\r\nMMMDCCCI\r\nMCCLXXX\r\nCCXV\r\nMMDCCLXXI\r\nMMDLXXXIII\r\nMMMMDCXVII\r\nMMMCMLXV\r\nMCLXVIII\r\nMMMMCCLXXVI\r\nMMMDCCLXVIIII\r\nMMMMDCCCIX\r\nDLXXXXIX\r\nDCCCXXII\r\nMMMMIII\r\nMMMMCCCLXXVI\r\nDCCCXCIII\r\nDXXXI\r\nMXXXIIII\r\nCCXII\r\nMMMDCCLXXXIIII\r\nMMMCXX\r\nMMMCMXXVII\r\nDCCCXXXX\r\nMMCDXXXVIIII\r\nMMMMDCCXVIII\r\nLV\r\nMMMDCCCCVI\r\nMCCCII\r\nMMCMLXVIIII\r\nMDCCXI\r\nMMMMDLXVII\r\nMMCCCCLXI\r\nMMDCCV\r\nMMMCCCXXXIIII\r\nMMMMDI\r\nMMMDCCCXCV\r\nMMDCCLXXXXI\r\nMMMDXXVI\r\nMMMDCCCLVI\r\nMMDCXXX\r\nMCCCVII\r\nMMMMCCCLXII\r\nMMMMXXV\r\nMMCMXXV\r\nMMLVI\r\nMMDXXX\r\nMMMMCVII\r\nMDC\r\nMCCIII\r\nMMMMDCC\r\nMMCCLXXV\r\nMMDCCCXXXXVI\r\nMMMMCCCLXV\r\nCDXIIII\r\nMLXIIII\r\nCCV\r\nMMMCMXXXI\r\nCCCCLXVI\r\nMDXXXII\r\nMMMMCCCLVIII\r\nMMV\r\nMMMCLII\r\nMCMLI\r\nMMDCCXX\r\nMMMMCCCCXXXVI\r\nMCCLXXXI\r\nMMMCMVI\r\nDCCXXX\r\nMMMMCCCLXV\r\nDCCCXI\r\nMMMMDCCCXIV\r\nCCCXXI\r\nMMDLXXV\r\nCCCCLXXXX\r\nMCCCLXXXXII\r\nMMDCIX\r\nDCCXLIIII\r\nDXIV\r\nMMMMCLII\r\nCDLXI\r\nMMMCXXVII\r\nMMMMDCCCCLXIII\r\nMMMDCLIIII\r\nMCCCCXXXXII\r\nMMCCCLX\r\nCCCCLIII\r\nMDCCLXXVI\r\nMCMXXIII\r\nMMMMDLXXVIII\r\nMMDCCCCLX\r\nMMMCCCLXXXX\r\nMMMCDXXVI\r\nMMMDLVIII\r\nCCCLXI\r\nMMMMDCXXII\r\nMMDCCCXXI\r\nMMDCCXIII\r\nMMMMCLXXXVI\r\nMDCCCCXXVI\r\nMDV\r\nMMDCCCCLXXVI\r\nMMMMCCXXXVII\r\nMMMDCCLXXVIIII\r\nMMMCCCCLXVII\r\nDCCXLI\r\nMMCLXXXVIII\r\nMCCXXXVI\r\nMMDCXLVIII\r\nMMMMCXXXII\r\nMMMMDCCLXVI\r\nMMMMCMLI\r\nMMMMCLXV\r\nMMMMDCCCXCIV\r\nMCCLXXVII\r\nLXXVIIII\r\nDCCLII\r\nMMMCCCXCVI\r\nMMMCLV\r\nMMDCCCXXXXVIII\r\nDCCCXV\r\nMXC\r\nMMDCCLXXXXVII\r\nMMMMCML\r\nMMDCCCLXXVIII\r\nDXXI\r\nMCCCXLI\r\nDCLXXXXI\r\nMMCCCLXXXXVIII\r\nMDCCCCLXXVIII\r\nMMMMDXXV\r\nMMMDCXXXVI\r\nMMMCMXCVII\r\nMMXVIIII\r\nMMMDCCLXXIV\r\nMMMCXXV\r\nDXXXVIII\r\nMMMMCLXVI\r\nMDXII\r\nMMCCCLXX\r\nCCLXXI\r\nDXIV\r\nMMMCLIII\r\nDLII\r\nMMMCCCXLIX\r\nMMCCCCXXVI\r\nMMDCXLIII\r\nMXXXXII\r\nCCCLXXXV\r\nMDCLXXVI\r\nMDCXII\r\nMMMCCCLXXXIII\r\nMMDCCCCLXXXII\r\nMMMMCCCLXXXV\r\nMMDCXXI\r\nDCCCXXX\r\nMMMDCCCCLII\r\nMMMDCCXXII\r\nMMMMCDXCVIII\r\nMMMCCLXVIIII\r\nMMXXV\r\nMMMMCDXIX\r\nMMMMCCCX\r\nMMMCCCCLXVI\r\nMMMMDCLXXVIIII\r\nMMMMDCXXXXIV\r\nMMMCMXII\r\nMMMMXXXIII\r\nMMMMDLXXXII\r\nDCCCLIV\r\nMDXVIIII\r\nMMMCLXXXXV\r\nCCCCXX\r\nMMDIX\r\nMMCMLXXXVIII\r\nDCCXLIII\r\nDCCLX\r\nD\r\nMCCCVII\r\nMMMMCCCLXXXIII\r\nMDCCCLXXIIII\r\nMMMDCCCCLXXXVII\r\nMMMMCCCVII\r\nMMMDCCLXXXXVI\r\nCDXXXIV\r\nMCCLXVIII\r\nMMMMDLX\r\nMMMMDXII\r\nMMMMCCCCLIIII\r\nMCMLXXXXIII\r\nMMMMDCCCIII\r\nMMDCLXXXIII\r\nMDCCCXXXXIV\r\nXXXXVII\r\nMMMDCCCXXXII\r\nMMMDCCCXLII\r\nMCXXXV\r\nMDCXXVIIII\r\nMMMCXXXXIIII\r\nMMMMCDXVII\r\nMMMDXXIII\r\nMMMMCCCCLXI\r\nDCLXXXXVIIII\r\nLXXXXI\r\nCXXXIII\r\nMCDX\r\nMCCLVII\r\nMDCXXXXII\r\nMMMCXXIV\r\nMMMMLXXXX\r\nMMDCCCCXLV\r\nMLXXX\r\nMMDCCCCLX\r\nMCDLIII\r\nMMMCCCLXVII\r\nMMMMCCCLXXIV\r\nMMMDCVIII\r\nDCCCCXXIII\r\nMMXCI\r\nMMDCCIV\r\nMMMMDCCCXXXIV\r\nCCCLXXI\r\nMCCLXXXII\r\nMCMIII\r\nCCXXXI\r\nDCCXXXVIII\r\nMMMMDCCXLVIIII\r\nMMMMCMXXXV\r\nDCCCLXXV\r\nDCCXCI\r\nMMMMDVII\r\nMMMMDCCCLXVIIII\r\nCCCXCV\r\nMMMMDCCXX\r\nMCCCCII\r\nMMMCCCXC\r\nMMMCCCII\r\nMMDCCLXXVII\r\nMMDCLIIII\r\nCCXLIII\r\nMMMDCXVIII\r\nMMMCCCIX\r\nMCXV\r\nMMCCXXV\r\nMLXXIIII\r\nMDCCXXVI\r\nMMMCCCXX\r\nMMDLXX\r\nMMCCCCVI\r\nMMDCCXX\r\nMMMMDCCCCXCV\r\nMDCCCXXXII\r\nMMMMDCCCCXXXX\r\nXCIV\r\nMMCCCCLX\r\nMMXVII\r\nMLXXI\r\nMMMDXXVIII\r\nMDCCCCII\r\nMMMCMLVII\r\nMMCLXXXXVIII\r\nMDCCCCLV\r\nMCCCCLXXIIII\r\nMCCCLII\r\nMCDXLVI\r\nMMMMDXVIII\r\nDCCLXXXIX\r\nMMMDCCLXIV\r\nMDCCCCXLIII\r\nCLXXXXV\r\nMMMMCCXXXVI\r\nMMMDCCCXXI\r\nMMMMCDLXXVII\r\nMCDLIII\r\nMMCCXLVI\r\nDCCCLV\r\nMCDLXX\r\nDCLXXVIII\r\nMMDCXXXIX\r\nMMMMDCLX\r\nMMDCCLI\r\nMMCXXXV\r\nMMMCCXII\r\nMMMMCMLXII\r\nMMMMCCV\r\nMCCCCLXIX\r\nMMMMCCIII\r\nCLXVII\r\nMCCCLXXXXIIII\r\nMMMMDCVIII\r\nMMDCCCLXI\r\nMMLXXIX\r\nCMLXIX\r\nMMDCCCXLVIIII\r\nDCLXII\r\nMMMCCCXLVII\r\nMDCCCXXXV\r\nMMMMDCCXCVI\r\nDCXXX\r\nXXVI\r\nMMLXIX\r\nMMCXI\r\nDCXXXVII\r\nMMMMCCCXXXXVIII\r\nMMMMDCLXI\r\nMMMMDCLXXIIII\r\nMMMMVIII\r\nMMMMDCCCLXII\r\nMDCXCI\r\nMMCCCXXIIII\r\nCCCCXXXXV\r\nMMDCCCXXI\r\nMCVI\r\nMMDCCLXVIII\r\nMMMMCXL\r\nMLXVIII\r\nCMXXVII\r\nCCCLV\r\nMDCCLXXXIX\r\nMMMCCCCLXV\r\nMMDCCLXII\r\nMDLXVI\r\nMMMCCCXVIII\r\nMMMMCCLXXXI\r\nMMCXXVII\r\nMMDCCCLXVIII\r\nMMMCXCII\r\nMMMMDCLVIII\r\nMMMMDCCCXXXXII\r\nMMDCCCCLXXXXVI\r\nMDCCXL\r\nMDCCLVII\r\nMMMMDCCCLXXXVI\r\nDCCXXXIII\r\nMMMMDCCCCLXXXV\r\nMMCCXXXXVIII\r\nMMMCCLXXVIII\r\nMMMDCLXXVIII\r\nDCCCI\r\nMMMMLXXXXVIIII\r\nMMMCCCCLXXII\r\nMMCLXXXVII\r\nCCLXVI\r\nMCDXLIII\r\nMMCXXVIII\r\nMDXIV\r\nCCCXCVIII\r\nCLXXVIII\r\nMMCXXXXVIIII\r\nMMMDCLXXXIV\r\nCMLVIII\r\nMCDLIX\r\nMMMMDCCCXXXII\r\nMMMMDCXXXIIII\r\nMDCXXI\r\nMMMDCXLV\r\nMCLXXVIII\r\nMCDXXII\r\nIV\r\nMCDLXXXXIII\r\nMMMMDCCLXV\r\nCCLI\r\nMMMMDCCCXXXVIII\r\nDCLXII\r\nMCCCLXVII\r\nMMMMDCCCXXXVI\r\nMMDCCXLI\r\nMLXI\r\nMMMCDLXVIII\r\nMCCCCXCIII\r\nXXXIII\r\nMMMDCLXIII\r\nMMMMDCL\r\nDCCCXXXXIIII\r\nMMDLVII\r\nDXXXVII\r\nMCCCCXXIIII\r\nMCVII\r\nMMMMDCCXL\r\nMMMMCXXXXIIII\r\nMCCCCXXIV\r\nMMCLXVIII\r\nMMXCIII\r\nMDCCLXXX\r\nMCCCLIIII\r\nMMDCLXXI\r\nMXI\r\nMCMLIV\r\nMMMCCIIII\r\nDCCLXXXVIIII\r\nMDCLIV\r\nMMMDCXIX\r\nCMLXXXI\r\nDCCLXXXVII\r\nXXV\r\nMMMXXXVI\r\nMDVIIII\r\nCLXIII\r\nMMMCDLVIIII\r\nMMCCCCVII\r\nMMMLXX\r\nMXXXXII\r\nMMMMCCCLXVIII\r\nMMDCCCXXVIII\r\nMMMMDCXXXXI\r\nMMMMDCCCXXXXV\r\nMMMXV\r\nMMMMCCXVIIII\r\nMMDCCXIIII\r\nMMMXXVII\r\nMDCCLVIIII\r\nMMCXXIIII\r\nMCCCLXXIV\r\nDCLVIII\r\nMMMLVII\r\nMMMCXLV\r\nMMXCVII\r\nMMMCCCLXXXVII\r\nMMMMCCXXII\r\nDXII\r\nMMMDLV\r\nMCCCLXXVIII\r\nMMMCLIIII\r\nMMMMCLXXXX\r\nMMMCLXXXIIII\r\nMDCXXIII\r\nMMMMCCXVI\r\nMMMMDLXXXIII\r\nMMMDXXXXIII\r\nMMMMCCCCLV\r\nMMMDLXXXI\r\nMMMCCLXXVI\r\nMMMMXX\r\nMMMMDLVI\r\nMCCCCLXXX\r\nMMMXXII\r\nMMXXII\r\nMMDCCCCXXXI\r\nMMMDXXV\r\nMMMDCLXXXVIIII\r\nMMMDLXXXXVII\r\nMDLXIIII\r\nCMXC\r\nMMMXXXVIII\r\nMDLXXXVIII\r\nMCCCLXXVI\r\nMMCDLIX\r\nMMDCCCXVIII\r\nMDCCCXXXXVI\r\nMMMMCMIV\r\nMMMMDCIIII\r\nMMCCXXXV\r\nXXXXVI\r\nMMMMCCXVII\r\nMMCCXXIV\r\nMCMLVIIII\r\nMLXXXIX\r\nMMMMLXXXIX\r\nCLXXXXIX\r\nMMMDCCCCLVIII\r\nMMMMCCLXXIII\r\nMCCCC\r\nDCCCLIX\r\nMMMCCCLXXXII\r\nMMMCCLXVIIII\r\nMCLXXXV\r\nCDLXXXVII\r\nDCVI\r\nMMX\r\nMMCCXIII\r\nMMMMDCXX\r\nMMMMXXVIII\r\nDCCCLXII\r\nMMMMCCCXLIII\r\nMMMMCLXV\r\nDXCI\r\nMMMMCLXXX\r\nMMMDCCXXXXI\r\nMMMMXXXXVI\r\nDCLX\r\nMMMCCCXI\r\nMCCLXXX\r\nMMCDLXXII\r\nDCCLXXI\r\nMMMCCCXXXVI\r\nMCCCCLXXXVIIII\r\nCDLVIII\r\nDCCLVI\r\nMMMMDCXXXVIII\r\nMMCCCLXXXIII\r\nMMMMDCCLXXV\r\nMMMXXXVI\r\nCCCLXXXXIX\r\nCV\r\nCCCCXIII\r\nCCCCXVI\r\nMDCCCLXXXIIII\r\nMMDCCLXXXII\r\nMMMMCCCCLXXXI\r\nMXXV\r\nMMCCCLXXVIIII\r\nMMMCCXII\r\nMMMMCCXXXIII\r\nMMCCCLXXXVI\r\nMMMDCCCLVIIII\r\nMCCXXXVII\r\nMDCLXXV\r\nXXXV\r\nMMDLI\r\nMMMCCXXX\r\nMMMMCXXXXV\r\nCCCCLIX\r\nMMMMDCCCLXXIII\r\nMMCCCXVII\r\nDCCCXVI\r\nMMMCCCXXXXV\r\nMDCCCCXCV\r\nCLXXXI\r\nMMMMDCCLXX\r\nMMMDCCCIII\r\nMMCLXXVII\r\nMMMDCCXXIX\r\nMMDCCCXCIIII\r\nMMMCDXXIIII\r\nMMMMXXVIII\r\nMMMMDCCCCLXVIII\r\nMDCCCXX\r\nMMMMCDXXI\r\nMMMMDLXXXIX\r\nCCXVI\r\nMDVIII\r\nMMCCLXXI\r\nMMMDCCCLXXI\r\nMMMCCCLXXVI\r\nMMCCLXI\r\nMMMMDCCCXXXIV\r\nDLXXXVI\r\nMMMMDXXXII\r\nMMMXXIIII\r\nMMMMCDIV\r\nMMMMCCCXLVIII\r\nMMMMCXXXVIII\r\nMMMCCCLXVI\r\nMDCCXVIII\r\nMMCXX\r\nCCCLIX\r\nMMMMDCCLXXII\r\nMDCCCLXXV\r\nMMMMDCCCXXIV\r\nDCCCXXXXVIII\r\nMMMDCCCCXXXVIIII\r\nMMMMCCXXXV\r\nMDCLXXXIII\r\nMMCCLXXXIV\r\nMCLXXXXIIII\r\nDXXXXIII\r\nMCCCXXXXVIII\r\nMMCLXXIX\r\nMMMMCCLXIV\r\nMXXII\r\nMMMCXIX\r\nMDCXXXVII\r\nMMDCCVI\r\nMCLXXXXVIII\r\nMMMCXVI\r\nMCCCLX\r\nMMMCDX\r\nCCLXVIIII\r\nMMMCCLX\r\nMCXXVIII\r\nLXXXII\r\nMCCCCLXXXI\r\nMMMI\r\nMMMCCCLXIV\r\nMMMCCCXXVIIII\r\nCXXXVIII\r\nMMCCCXX\r\nMMMCCXXVIIII\r\nMCCLXVI\r\nMMMCCCCXXXXVI\r\nMMDCCXCIX\r\nMCMLXXI\r\nMMCCLXVIII\r\nCDLXXXXIII\r\nMMMMDCCXXII\r\nMMMMDCCLXXXVII\r\nMMMDCCLIV\r\nMMCCLXIII\r\nMDXXXVII\r\nDCCXXXIIII\r\nMCII\r\nMMMDCCCLXXI\r\nMMMLXXIII\r\nMDCCCLIII\r\nMMXXXVIII\r\nMDCCXVIIII\r\nMDCCCCXXXVII\r\nMMCCCXVI\r\nMCMXXII\r\nMMMCCCLVIII\r\nMMMMDCCCXX\r\nMCXXIII\r\nMMMDLXI\r\nMMMMDXXII\r\nMDCCCX\r\nMMDXCVIIII\r\nMMMDCCCCVIII\r\nMMMMDCCCCXXXXVI\r\nMMDCCCXXXV\r\nMMCXCIV\r\nMCMLXXXXIII\r\nMMMCCCLXXVI\r\nMMMMDCLXXXV\r\nCMLXIX\r\nDCXCII\r\nMMXXVIII\r\nMMMMCCCXXX\r\nXXXXVIIII'
print(sum([s.count(num) * x for num, x in X]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-19 20:01:37 | 显示全部楼层
743
by cpp
/*
 * @Author: your name
 * @Date: 2021-07-19 17:21:13
 * @LastEditTime: 2021-07-19 20:01:09
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \Nutstore\pe89.cc
 */
#include<iostream>
#include<string>
#include<map>
using namespace std;

map<char, int> rule;

int roma2arab(string s){
    int res = 0;
    for (int i = 0; i < s.size(); i++){
        switch (s[i])
        {
        case 'M':;
        case 'D':;
        case 'L':;
        case 'V':   
            res += rule[s[i]];
            break;
            
        case 'I':
            if (i+1 < s.size() && s[i+1] == 'V' || s[i+1] == 'X')   res -= rule[s[i]];
            else res += rule[s[i]];
            break;
        case 'X':
            if (i+1 < s.size() && s[i+1] == 'L' || s[i+1] == 'C')   res -= rule[s[i]];
            else res += rule[s[i]];
            break;
        case 'C':
            if (i+1 < s.size() && s[i+1] == 'D' || s[i+1] == 'M')   res -= rule[s[i]];
            else res += rule[s[i]];
            break;
        default:
            break;
        }
    }
    return res;
}

void init_map(){
    rule['M'] = 1000;
    rule['D'] = 500;
    rule['C'] = 100;
    rule['L'] = 50;
    rule['X'] = 10;
    rule['V'] = 5;
    rule['I'] = 1;
}

void solve(int & res, int digit){   //计算后三位需要的罗马数字位数
    if (digit >= 1 && digit <= 3)   res += digit;
    else if (digit == 4 || digit == 9)    res += 2;
    else if (digit >= 5 && digit <= 8)  res += digit - 5 + 1;
    return;
}

int optimize(int n){    //求最短长度
    int res = 0;
    
    int sen = n / 1000; //千位
    res += sen;

    int hyaku = n % 1000 / 100; //百位
    int juu = n % 100 / 10; //十位
    int ichi = n % 10;  //各位
    solve(res, hyaku);
    solve(res, juu);
    solve(res, ichi);
    
    return res;
}

int main(int argc, char const *argv[])
{
    init_map();

    freopen("D:\\Users\\zihao\\Documents\\Nutstore\\i.in", "r", stdin);
    string roma;
    int kount = 0;
    while(getline(cin, roma)){
        int arab = roma2arab(roma);
        int shortest = optimize(arab);
        kount += roma.size() - shortest;
    }
    cout << kount << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-19 20:02:20 | 显示全部楼层

主要得读懂罗马数字的写法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表