A85876.「BJOI2019」奥术神杖
省选/NOI-
通过率:0%
时间限制:1.00s
内存限制:512MB
题目描述
Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的神器,试图借助神器的神秘力量帮助她们战胜地灾军团。
在付出了惨痛的代价后,精灵们从步步凶险的远古战场取回了一件保存尚完好的神杖。但在经历过那场所有史书都视为禁忌的“诸神黄昏之战”后,神杖上镶嵌的奥术宝石已经残缺,神力也几乎消耗殆尽。精灵高层在至高会议中决定以举国之力收集残存至今的奥术宝石,并重金悬赏天下能工巧匠修复这件神杖。
你作为神术一脉第五百零一位传人,接受了这个艰巨而神圣的使命。 神杖上从左到右镶嵌了 n 颗奥术宝石,奥术宝石一共有 10 种,用数字 0123456789 表示。有些位置的宝石已经残缺,用 . 表示,你需要用完好的奥术宝石填补每一处残缺的部分(每种奥术宝石个数不限,且不能够更换未残缺的宝石)。古老的魔法书上记载了 m 种咒语 (Si,Vi),其中 Si 是一个非空数字串,Vi 是这种组合能够激发的神力。
神杖的初始神力值 Magic=1,每当神杖中出现了连续一段宝石与 Si 相等时,神力值 Magic 就会乘以 Vi。但神杖如果包含了太多咒语就不再纯净导致神力降低:设 c 为神杖包含的咒语个数(若咒语类别相同但出现位置不同视为多次),神杖最终的神力值为 cMagic。(若 c=0 则神杖最终神力值为 1。)
例如有两种咒语 (01,3) 、(10,4),那么神杖 0101 的神力值为 33×4×3。
你需要使修复好的神杖的最终的神力值最大,输出任何一个解即可。
输入格式
第一行两个正整数 n,m,表示宝石数和咒语数。
第二行为一个长度为 n 的字符串 T,表示初始的神杖。
接下来 m 行每行一个非空数字串 Si 和一个正整数 Vi,表示每种咒语。
输出格式
输出最终神杖上从左到右镶嵌的宝石,多解时任意输出一个即可。
输入输出样例
输入#1
4 3 .... 1 2 2 2 3 1
输出#1
2019
输入#2
5 4 ..0.. 0 2 00 2 01 4 10 3
输出#2
11012
输入#3
18 6 ...2.1.0.1..1.0..1 011 6 111 4 010 12 121 7 101 5 10 3
输出#3
121211203112120121
说明/提示
设 s=∑i=1m∣Si∣,即所有咒语的串长之和。
| 测试点 | n≤ | s≤ | 特殊性质 |
|---|---|---|---|
| 1∼3 | 6 | 20 | |
| 4∼5 | 501 | 5 | |
| 6 | 501 | 501 | 所有 Vi 相同 |
| 7 | 501 | 501 | Vi 最多只有 2 种不同的取值 |
| 8 | 501 | 501 | Vi 最多只有 3 种不同的取值 |
| 9∼11 | 501 | 501 | T 中全部由 . 组成 |
| 12∼13 | 501 | 501 | T 最多只有 3 个位置是 . |
| 14∼16 | 501 | 501 | |
| 17∼20 | 1501 | 1501 |
对于 100% 的数据,满足 1≤n,m,s≤1501,1≤Vi≤109。