#P15918. [Roi2021]莫斯科数字
[Roi2021]莫斯科数字
题目描述
你大概熟悉罗马数字,也很可能听过“莫斯科是第三罗马”这句话。因此,出题人仿照罗马数字设计了一种进阶版本:莫斯科数字。
莫斯科数字的数字符号是大写英文字母 A 到 Z。一个数由若干个这样的符号组成。每个符号对应的值如下:
| 字母 | 值 | 字母 | 值 | 字母 | 值 | 字母 | 值 |
|---|---|---|---|---|---|---|---|
| A | 1 | H | O | V | |||
| B | 5 | I | P | W | |||
| C | 10 | J | Q | X | |||
| D | 50 | K | R | Y | |||
| E | 100 | L | S | Z | |||
| F | 500 | M | T | ||||
| G | N | U | |||||
一个莫斯科数字的值等于其中所有符号贡献之和。每个符号的贡献可能为正,也可能为负:
- 若该符号右侧不存在严格更大的符号,则它的贡献等于自身值;
- 否则,它的贡献等于自身值的相反数。
例如:
BBA的值为 ;BBBC的值为 ;ABC的值为 ;BAC的值为 ;ACA的值为 。
现在给出若干个数字模板。每个模板是一个由大写英文字母和问号 ? 组成的字符串。对每个模板,你需要把每个 ? 替换成 A 到 Z 中的某个字母,使得到的莫斯科数字的值尽可能大。
输入格式
第一行包含一个整数 ,表示模板数量。
接下来 行,每行包含一个字符串 ,由大写英文字母和字符 ? 组成,表示一个模板。
输出格式
对每个模板输出两行:
第一行输出该模板能得到的最大值,使用十进制表示。
第二行输出一种达到最大值的替换结果,即把模板中的所有 ? 替换为大写英文字母后的字符串。
若有多种最优替换方案,输出任意一种即可。
数据范围
所有字符串总长度不超过 。
样例输入
4
BBBC
????
A?B?C?D
YYYYY?
样例输出
-5
BBBC
20000000000000
ZZZZ
15000000000034
AZBZCZD
6000000000000
YYYYYY
子任务
记所有字符串总长度为 。
| 子任务 | 分值 | 限制 | 依赖 | 检查信息 |
|---|---|---|---|---|
| 1 | 6 | , 不含 ? |
无 | 第一处错误 |
| 2 | 9 | , 不含 ? |
1 | |
| 3 | 40 | ,每个 至多含 3 个 ? |
||
| 4 | 20 | U, 1, 3 | ||
| 5 | 25 | U, 1-4 |