#P14697. [ICPC 2024 Tehran R] I am Sherlocked
[ICPC 2024 Tehran R] I am Sherlocked
Description
苏格兰场(伦敦警察厅总部)的侦探们告知夏洛克·福尔摩斯,詹姆斯·莫里亚蒂对中央银行发动了一次网络攻击。他们还发现存在一个可以阻止攻击的密码。根据他们的顶级特工的情报,莫里亚蒂将这个密码隐藏在他的一位客户的电话簿中。有趣的是,夏洛克可以接触到这位神秘的客户!
据了解,每个正确的电话号码都有 位数字,并且以数字 开头。莫里亚蒂的客户可能在每个电话号码的数字之间使用连字符("-")或空格字符进行分隔。甚至对于电话簿中的某些电话号码,开头的数字 可能缺失。例如,电话号码 "09163264128" 可能被写成 "916 32 64 128",甚至 "- 0916-16-32--64 - 128-"。夏洛克并不清楚电话簿的确切内容,但根据他以往的知识,他知道电话簿主人是如何书写电话号码的。
夏洛克与电话簿的主人安排了一次在咖啡馆的友好交谈。与此同时,夏洛克的同事约翰·华生医生偷偷拿走了电话簿。夏洛克指示华生医生将电话簿清理成一个新的、由数字字符组成的清理后序列 ,存入他的电脑。该序列是零索引的,即第一个元素的索引为零。为此,华生医生应将电话号码按其在电话簿中出现的顺序连续地(不带任何非数字/分隔字符)输入电脑。为了清理电话号码,他应删除所有非数字字符,并在必要时添加开头的 。
根据计划,夏洛克将与这位神秘客户进行一次非正式交谈。一旦他获得关于密码的任何信息,他就会发送给华生医生。为此,华生医生已经准备好了清理后的序列 ,并将光标置于开头字符处。这个光标可以放置在 的任何字符之前。他需要等待夏洛克的指令来生成输出序列 。
夏洛克假设华生医生已经制作好了清理后的序列 ,并基于此发送以下指令之一:
- go :将光标移动到 中第 个清理后的电话号码的开头。例如,要跳转到 中的第一个电话号码,他会使用 "go 0"。
- forward :将光标向前移动 位数字。
- backward :将光标向后移动 位数字。
- next :从当前位置开始,将接下来的 位数字写入 。更具体地说,如果华生医生的光标在位置 之前,他应该选取数字 ,但光标位置保持不变。
- pick :如果 ,则从当前电话号码(即光标后数字所属的电话号码)的位置 到 () 将数字写入 。否则,他应该写入 。同样,光标位置保持不变。注意 ,且 "pick 0 0" 将选取第一个数字。
为了进行可能的修正,夏洛克也可能发送以下指令:
- delete :从 的末尾删除最后 位数字。
Input Format
输入由电话簿的内容和夏洛克的指令组成。电话簿包含 个电话号码 (),由逗号或换行符分隔。电话簿中的每个电话号码是一个字符串,由 或 位数字 (0-9) 以及可能的连字符("-")和/或空格字符组成。电话簿的大小(即电话簿中的字符数)不超过 个字符。电话号码列表以单独一行包含单个字符 "#" 结束。
接下来的每一行包含夏洛克的一条指令。他最多会发送 条指令。所有指令的参数都是不大于 的非负整数。保证夏洛克的所有短信都是上述六种指令形式之一。
Output Format
输出提取出的秘密密码(可能为空),它是一个数字字符串。如果提取出的秘密密码超过 位数字,则仅输出前 位数字。夏洛克可能会分心并发送有故障的指令。他可能会跳转到一个不存在的电话号码(使用 "go"),或者为 "forward"、"backward"、"next"、"pick" 和 "delete" 发送无效参数,即指令引用了清理后序列 中不存在的数字或电话号码。在这种情况下,你认为莫里亚蒂已经成功,并输出大写的 MISS ME!。
0912 358 8908
0872 -3344567,0989112 -2345
9899988782
#
go 0
pick 0 3
next 4
forward 12
next 2
backward 2
pick 0 1
go 3
pick 0 1
delete 1
0912091287090
09242424024
00188990376
#
go 2
next 4
delete 1
MISS ME!
Hint
翻译由 DeepSeek V3 完成
京公网安备 11011102002149号