#P14212. [ROI 2016 Day2] 二进制输入
[ROI 2016 Day2] 二进制输入
题目背景
译自 ROI 2016 Day2 T4. Тренажёр «10_2-пальцевый набор»
题目描述
现代的机器人程序员必须掌握盲打的 指法,用以输入只由字符 0 和 1 组成的二进制字符串。在专为已经熟练掌握 指法的机器人设计的创新训练器中,提出了如下练习。
屏幕上方显示一个由 0 和 1 组成的目标字符串。屏幕下方给出若干对 ,其中 是一个二进制单词, 是其代价——表示每次在输入目标字符串时使用该单词所需的罚分。
机器人需要将给定的目标字符串输入出来。它可以使用提供的二进制单词的前缀或后缀,并将它们依次拼接起来。同一个单词可以被使用任意多次。但每次使用该单词的前缀或后缀时,都会获得等于该单词代价 的罚分。
一个单词的前缀是从单词第一个字符开始的连续字符序列,一个单词的后缀是以单词最后一个字符结尾的连续字符序列。整个单词既是它的前缀,也是它的后缀。
请编写一个程序,计算在使用所给单词的前缀和后缀拼接出目标字符串时,机器人所能获得的最小总罚分。若无法构造出目标字符串,则输出 。
输入格式
输入的第一行包含三个整数 、 和 ——分别表示目标字符串的长度、可使用的单词数量,以及这些单词长度的总和(;;)。
第二行包含目标字符串,由 个字符组成,每个字符为 0 或 1。
接下来的 行中,每行描述一个可使用的二进制单词。首先给出该单词的罚分 (),然后是一个非空的二进制字符串 (仅由 0 和 1 组成),二者以空格分隔。
每个单词的长度不超过 ,该值在不同子任务中有额外限制。
输出格式
输出一个整数——输入目标字符串所需的最小罚分总和;如果无法通过给定的单词前缀或后缀组合出目标字符串,则输出 。
9 2 8
000110100
1 100
1 11001
4
9 3 10
010110101
3 0101
10 011
2 100
8
3 1 3
100
1 101
-1
提示
样例解释
在第一个样例中,可以按以下方式获得目标字符串:
- 使用第一个单词的后缀(长度为 2);
- 再次使用第一个单词的后缀(长度为 1);
- 使用第二个单词的前缀(长度为 3);
- 最后使用第一个单词的完整形式。
总罚分为 4。
评分说明
下表列出了各子任务中对输入参数的附加限制。其中 表示提供给机器人的每个二进制单词的最大长度。
| 子任务编号 | 分值 | 必须通过的子任务 | |||||
|---|---|---|---|---|---|---|---|
| 1 | 20 | — | |||||
| 2 | 10 | — | — | 1 | |||
| 3 | 8 | 1, 2 | |||||
| 4 | 1–3 | ||||||
| 5 | 10 | — | — | ||||
| 6 | 5 | 5 | |||||
| 7 | 9 | — | — | ||||
| 8 | 5 | 7 | |||||
| 9 | 7, 8 | ||||||
| 10 | — | 1–9 | |||||
| 11 | 1–10 | ||||||
| 12 | 1–11 | ||||||
| 13 | 1–12 |
翻译由 ChatGPT-5 完成