QOJ.ac

QOJ

Límite de tiempo: 1.0 s Límite de memoria: 512 MB Puntuación total: 100

#4006. A=B

Estadísticas

Marisa 学习了一种有趣的语言,叫做 A=B。她发现这种语言具有语法简单、易于学习且方便编写的优点。

以下是 A=B 的用户手册: (注意:它可能与原始游戏“A=B”有所不同,因此请仔细阅读题目描述。)

  • 指令集 A=B 的指令集包括:

    1. string1=string2 在字符串中找到 string1 的最左侧出现位置,并将其替换为 string2
    2. string1=(return)string2 如果找到 string1,则将整个字符串替换为 string2 并立即结束程序。
  • 程序结构 一个 A=B 程序由若干行指令组成。每一行必须包含且仅包含一个等号(‘=’)。 以下字符是保留字符:‘=’,‘(’,‘)’。

  • 执行顺序

    1. 读取输入字符串。
    2. 从最顶行开始,找到第一条可以执行的指令。
    3. 如果找到,执行该行并回到第 2 步。
    4. 如果没有找到,则返回当前字符串作为输出。

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 中的保留字符,你不能在 string1string2 中使用它们。
  • 在上述指令格式中,string1string2 的长度应最多为 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 行)。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.