QOJ.ac

QOJ

时间限制: 1 s 内存限制: 512 MB 总分: 100

#177. 完美破解复杂的算术谜题

统计

你需要破解一个基于二进制数字的加密等式。

原始等式仅由二进制数字(“0”和“1”)、运算符(“+”、“-”、“*”)、括号(“(”和“)”)以及等号(“=”)组成。加密过程将原始算术等式中的某些字符替换为字母。如果一个字符被替换,则其所有出现的位置都会被同一个字母替换。两个不同的字符绝不会被替换为同一个字母。注意,加密并不总是替换同一个字符的所有出现位置;某些出现位置可能被替换,而另一些可能保持原样。某些字符可能根本没有被替换。罗马字母表中的任何大小写字母都可以用作替换字母。注意,大小写是敏感的,即“a”和“A”是不同的字母。不仅数字,运算符、括号甚至等号都可能被替换。

算术等式由以下上下文无关文法的起始符号 $Q$ 导出:

$$ \begin{aligned} Q &::= E=E \\ E &::= T \mid E+T \mid E-T \\ T &::= F \mid T*F \\ F &::= N \mid -F \mid (E) \\ N &::= 0 \mid 1B \\ B &::= \varepsilon \mid 0B \mid 1B \end{aligned} $$

此处,$\varepsilon$ 表示空。

如该文法所示,算术等式应包含一个等号。等式的每一侧都是一个由数字、加法、减法、乘法和取反组成的表达式。乘法的优先级高于加法和减法,而取反的优先级高于乘法。乘法、加法和减法是左结合的。例如,$x-y+z$ 表示 $(x-y)+z$,而不是 $x-(y+z)$。数字采用二进制表示,由二进制数字 0 和 1 组成。多位数字总是以 1 开头。括号和取反符号在等式中可能冗余出现,例如 $((--x+y))+z$。

编写一个程序,对于给定的加密等式,计算出有多少种不同的原始正确等式。在此,等式必须符合上述文法,并且当等式两边的计算值相等时,该等式是正确的。

输入格式

输入包含一个测试用例,为一个由罗马字母、二进制数字、运算符、括号和等号组成的字符串。输入字符串长度不超过 31 个字符。

输出格式

在一行中输出可以加密为该输入字符串的正确等式的数量。

样例

样例输入 1

ACM

样例输出 1

0

样例输入 2

icpc

样例输出 2

1

样例输入 3

BAYL0R

样例输出 3

3

样例输入 4

-AB+AC-A

样例输出 4

1

样例输入 5

abcdefghi

样例输出 5

0

样例输入 6

111-10=1+10*10

样例输出 6

1

样例输入 7

0=10-1

样例输出 7

0

说明

对于样例 1,C 必须是 =,因为任何等式在两个表达式之间都有一个 =。由于 AM 必须不同,尽管存在符合文法的等式,但没有一个是正确的。

对于样例 2,唯一可能的正确等式是 -0=0

对于样例 3 (B-A-Y-L-zero-R),有三个不同的正确等式:0=-(0)0=(-0)-0=(0)。注意,其中一个 0 在加密等式中没有被替换为字母。

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.