#P17045. [NWERC 2021] IXth Problem

[NWERC 2021] IXth Problem

背景

译自 Northwestern Europe Regional Contest (NWERC) 2021 Problem I。

原题许可协议为 CC BY-SA。

题目描述

Emily 最近在学校学习了罗马帝国及其文明。其中一个尤其令她着迷的方面是他们使用的数字系统:罗马数字。罗马数字系统使用七种不同的数字符号,每种符号表示一个不同的值,并用一个字母表示:I 表示 11V 表示 55X 表示 1010L 表示 5050C 表示 100100D 表示 500500M 表示 10001\,00011101010010010001\,000 的若干倍数按照下表书写:

×\times 1 2 3 4 5 6 7 8 9
11 I II III IV V VI VII VIII IX
1010 X XX XXX XL L LX LXX LXXX XC
100100 C CC CCC CD D DC DCC DCCC CM
10001\,000 M MM MMM

表中大多数数字都是加法形式,也就是把各个符号的值相加。例如,LXX 表示 50+10+10=7050+10+10=70。然而,第 44 列和第 99 列使用所谓的减法记数法,其中 IV 读作 515-1IX 读作 10110-1,依此类推。

1139993\,999 的每个数,都写成表中若干项的组合,每一行至多使用一个项,并且从下到上书写。例如,20212\,021 写作 MMXXI594594 写作 DXCIV。注意,在这个数字系统中,无法书写大于 39993\,999 的数;并且减法记数法只能用于上面六种情况(例如 IC 不被认为是合法的罗马数字)。

Emily 在阁楼里找到了一堆旧的 Scrabble 拼字游戏套装。她扔掉了所有不是罗马数字符号的字母牌,并开始用剩下的牌组成罗马数字。只用一张牌组成一个罗马数字当然很容易,但在必须使用所有可用牌的前提下,最少可以组成多少个罗马数字?

输入格式

输入包含:

  • 一行七个整数 m,d,c,,x,vm,d,c,\ell,x,vii0m,d,c,,x,v,i10180 \leq m,d,c,\ell,x,v,i \leq 10^{18}),分别表示必须使用的 MDCLXVI 牌的数量。

保证至少有一张牌,即 m+d+c++x+v+i1m+d+c+\ell+x+v+i \geq 1

输出格式

输出一个整数 nn,表示在使用输入中所有牌的前提下,能够组成的罗马数字个数的最小值。然后按照下面的格式输出一个最优方案:

  • 一个整数 kk,表示这个方案中使用了多少种不同的罗马数字。
  • 接下来输出 kk 对内容,每对由一个罗马数字和一个正整数组成,表示该罗马数字在方案中使用了多少次。

该方案必须恰好包含总共 nn 个罗马数字,并且必须恰好使用指定数量的每种字母。方案中的 kk 个罗马数字必须互不相同。不需要最小化 kk。如果存在多个最优方案,可以输出任意一个。

4 1 7 1 3 1 3
2
2
MMDCCCLXX 1
MMCCCXCVIII 1
0 0 0 300 2000 1000 2100
1000
2
XXVIII 700
LXXV 300

提示

【数据规模与约定】

对于所有数据,0m,d,c,,x,v,i10180 \leq m,d,c,\ell,x,v,i \leq 10^{18}m+d+c++x+v+i1m+d+c+\ell+x+v+i \geq 1;输出中的罗马数字必须是 1139993\,999 范围内的合法罗马数字。