Marisa 学习了一种有趣的语言,叫做 A=B。她发现这种语言具有语法简单、易于学习且方便编写的优点。
以下是 A=B 的用户手册: (注意:它可能与原始游戏“A=B”有所不同,因此请仔细阅读题目描述。)
指令集 A=B 的指令集包括:
string1=string2在字符串中找到string1的最左侧出现位置,并将其替换为string2。string1=(return)string2如果找到string1,则将整个字符串替换为string2并立即结束程序。
程序结构 一个 A=B 程序由若干行指令组成。每一行必须包含且仅包含一个等号(‘=’)。 以下字符是保留字符:‘=’,‘(’,‘)’。
执行顺序
- 读取输入字符串。
- 从最顶行开始,找到第一条可以执行的指令。
- 如果找到,执行该行并回到第 2 步。
- 如果没有找到,则返回当前字符串作为输出。
Marisa 曾经向 Alice 介绍过 A=B。然而,Alice 说:“你管这叫编程语言?你甚至不能写一个程序来检查字符串 $t$ 是否为字符串 $s$ 的子串!”
现在 Marisa 来向你求助。她希望你为这个问题设计一个 A=B 程序,并展示 A=B 的效率。
你的程序需要满足 Marisa 给出的以下要求:
- 读取输入字符串(输入格式为 $sSt$。‘S’ 是分隔符。$s$ 和 $t$ 是两个由字符 ‘a’、‘b’、‘c’ 组成的非空字符串。)
- 如果 $t$ 是 $s$ 的子串,程序应输出 1,否则输出 0。
- 你的程序可以使用的字符集为 {‘a’~‘z’, ‘A’~‘Z’, ‘0’~‘9’, ‘=’, ‘(’, ‘)’}。记住,‘=’、‘(’、‘)’ 是 A=B 中的保留字符,你不能在
string1或string2中使用它们。 - 在上述指令格式中,
string1和string2的长度应最多为 3。 - 假设输入字符串的长度为 $L$,指令执行次数不能超过 $\max(2L^2, 50)$,且执行过程中的字符串长度不能超过 $2L + 10$。
- 你的 A=B 程序中的指令行数不能超过 100。
输入格式
输入一个整数 $Tid$ ($0 \le Tid \le 2 \times 10^9$)。它用于生成测试集,对你来说可能没有用处。
输出格式
输出你的 A=B 程序,包含若干行指令。
测试数量不超过 20 个。在每个测试中,评测程序将使用输入文件中的 $Tid$ 来生成若干行输入字符串及其对应的答案。当且仅当你的 A=B 程序对所有测试中的每个输入字符串都能给出正确输出时,你的程序才被认为是正确的。
保证在所有测试中,每个输入字符串的长度 $L$ 满足 $3 \le L \le 1000$。
样例
样例 1
114514
514=(return)1 =514
样例 2
1919810
S=Sakuya =(return)0
样例 3
/* Sample input: caba Sample output: aabc Sample input: cbacab Sample output: aabbcc */
ba=ab ca=ac cb=bc
样例 4
/* Sample input: bababb Sample output: b Sample input: aababbaa Sample output: a */
ba=ab ab= bb=b aa=a
样例 5
/* Sample input: abc Sample output: true Sample input: cabc Sample output: false Sample input: ca Sample output: false */
b=a c=a aaaa=(return)false aaa=(return)true =(return)false
样例 6
/* Sample input: 10111+111 Sample output: 11110 Sample input: 101+10110 Sample output: 11011 */
A0=0A A1=1A B0=0B B1=1B 0A=a 0B=b 1A=b 1B=ca A=a B=b ac=b bc=ca 0+=+A 1+=+B += 0c=1 1c=c0 c=1 a=0 b=1
说明
第一和第二个样例展示了你应该如何提交答案。你需要读取一个整数,然后输出你的 A=B 程序。该整数将用于生成固定的数据集。第三到第六个样例给出了问题及其对应的程序,以帮助你熟悉 A=B 语言。所有这些程序可能并不满足 Marisa 给出的要求。
样例 1 如果输入是 “abcaSab”,过程将是:
abcSab$\xrightarrow{\text{line 2}}$514abcSab$\xrightarrow{\text{line 1}}$1(注意,空字符串可以在任何字符串的开头找到。) 如果输入是 “abcaSccc”,过程将是:abcSccc$\xrightarrow{\text{line 2}}$514abcSccc$\xrightarrow{\text{line 1}}$1因此该程序将获得 WRONG ANSWER 判决。样例 2 在第一条指令中,
string2等于 “Sakuya”,其长度超过了 3。 因此该程序将获得 WRONG ANSWER 判决。样例 3 输入:由 ‘a’、‘b’、‘c’ 组成的字符串。 输出:将输入按字母顺序排序。
样例 4 输入:由 ‘a’、‘b’ 组成的字符串。‘a’ 和 ‘b’ 的数量不同。 输出:出现次数最多的字母。
样例 5 输入:由 ‘a’、‘b’、‘c’ 组成的字符串。 输出:如果输入恰好包含三个字母,则返回 true。否则,返回 false。
样例 6 输入:两个二进制数,由 ‘+’ 分隔。 输出:这两个数的和,同样以二进制形式表示。 该程序从低位到高位执行加法。对于每一步,程序首先检查第一个数是否为空(第 15 行)。然后消耗第一个数的最低位(第 13 或 14 行),并将其写在第二个数的后面(第 1 - 4 行)。然后执行 1 位加法(第 5 - 8 行)。这里,‘a’ 和 ‘b’ 代表 ‘0’ 和 ‘1’,‘c’ 代表进位字符。在某些步骤中,第一个数可能非空但第二个数为空,因此第 9 - 10 行用于解决这种情况。第 11 - 12 行用于处理上一步的进位。最后,我们将 ‘a’、‘b’、‘c’ 转换为它们的真实数字(第 18 - 20 行),并解决第二个数非空的情况(第 16 - 17 行)。