P17045 [NWERC 2021] IX 题 / IXth Problem

题目背景

译自 [Northwestern Europe Regional Contest (NWERC) 2021](http://2021.nwerc.eu) Problem I。 原题许可协议为 CC BY-SA。

题目描述

Emily 最近在学校学习了罗马帝国及其文明。其中一个尤其令她着迷的方面是他们使用的数字系统:**罗马数字**。罗马数字系统使用七种不同的数字符号,每种符号表示一个不同的值,并用一个字母表示:`I` 表示 $1$,`V` 表示 $5$,`X` 表示 $10$,`L` 表示 $50$,`C` 表示 $100$,`D` 表示 $500$,`M` 表示 $1\,000$。$1$、$10$、$100$ 和 $1\,000$ 的若干倍数按照下表书写: | $\times$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | $1$ | `I` | `II` | `III` | `IV` | `V` | `VI` | `VII` | `VIII` | `IX` | | $10$ | `X` | `XX` | `XXX` | `XL` | `L` | `LX` | `LXX` | `LXXX` | `XC` | | $100$ | `C` | `CC` | `CCC` | `CD` | `D` | `DC` | `DCC` | `DCCC` | `CM` | | $1\,000$ | `M` | `MM` | `MMM` | | | | | | | 表中大多数数字都是加法形式,也就是把各个符号的值相加。例如,`LXX` 表示 $50+10+10=70$。然而,第 $4$ 列和第 $9$ 列使用所谓的减法记数法,其中 `IV` 读作 $5-1$,`IX` 读作 $10-1$,依此类推。 从 $1$ 到 $3\,999$ 的每个数,都写成表中若干项的组合,每一行至多使用一个项,并且从下到上书写。例如,$2\,021$ 写作 `MMXXI`,$594$ 写作 `DXCIV`。注意,在这个数字系统中,无法书写大于 $3\,999$ 的数;并且减法记数法只能用于上面六种情况(例如 `IC` 不被认为是合法的罗马数字)。 Emily 在阁楼里找到了一堆旧的 Scrabble 拼字游戏套装。她扔掉了所有不是罗马数字符号的字母牌,并开始用剩下的牌组成罗马数字。只用一张牌组成一个罗马数字当然很容易,但在必须使用所有可用牌的前提下,最少可以组成多少个罗马数字?

输入格式

输入包含: - 一行七个整数 $m,d,c,\ell,x,v$ 和 $i$($0 \leq m,d,c,\ell,x,v,i \leq 10^{18}$),分别表示必须使用的 `M`、`D`、`C`、`L`、`X`、`V` 和 `I` 牌的数量。 保证至少有一张牌,即 $m+d+c+\ell+x+v+i \geq 1$。

输出格式

输出一个整数 $n$,表示在使用输入中所有牌的前提下,能够组成的罗马数字个数的最小值。然后按照下面的格式输出一个最优方案: - 一个整数 $k$,表示这个方案中使用了多少种不同的罗马数字。 - 接下来输出 $k$ 对内容,每对由一个罗马数字和一个正整数组成,表示该罗马数字在方案中使用了多少次。 该方案必须恰好包含总共 $n$ 个罗马数字,并且必须恰好使用指定数量的每种字母。方案中的 $k$ 个罗马数字必须互不相同。不需要最小化 $k$。如果存在多个最优方案,可以输出任意一个。

说明/提示

【数据规模与约定】 对于所有数据,$0 \leq m,d,c,\ell,x,v,i \leq 10^{18}$;$m+d+c+\ell+x+v+i \geq 1$;输出中的罗马数字必须是 $1$ 到 $3\,999$ 范围内的合法罗马数字。