P14339 [JOI2020 预选赛 R2] 剪刀石头布 / Rock-Scissors-Paper Expression

题目描述

本题中,将剪刀石头布中的“石头”“剪刀”“布”分别用 $ R $、$ S $、$ P $ 表示。规则为:$ R $ 胜 $ S $,$ S $ 胜 $ P $,$ P $ 胜 $ R $。 当 $ x $、$ y $ 为剪刀石头布的手势时,定义 $ x + y $、$ x - y $、$ x * y $ 如下(注意:这些运算并非通常意义下的加法、减法、乘法): - $ x + y $:当 $ x \ne y $ 时,结果为 $ x $ 与 $ y $ 中的胜者;当 $ x = y $ 时,结果为 $ x $。 - $ x - y $:当 $ x \ne y $ 时,结果为 $ x $ 与 $ y $ 中的败者;当 $ x = y $ 时,结果为 $ x $。 - $ x * y $:当 $ x \ne y $ 时,结果为 $ R $、$ S $、$ P $ 中既不是 $ x $ 也不是 $ y $ 的那个手势;当 $ x = y $ 时,结果为 $ x $。 由剪刀石头布手势与 $ + $、$ - $、$ * $ 以及括号组成的表达式,按以下规则计算: - 先计算括号内的表达式。例如,$ R * (P + S) = R * S = P $。 - 对于相同层级的括号部分: - 优先计算 $ * $,再计算 $ + $ 和 $ - $。例如,$ R - P * S = R - (P * S) = R - R = R $。 - 对于优先级相同的运算符(如 $ + $ 与 $ + $、$ - $ 与 $ - $、$ + $ 与 $ - $、$ * $ 与 $ * $),按从左到右的顺序计算。例如,$ R - P + S = (R - P) + S = R + S = R $。 JOI 先生原本持有一个剪刀石头布表达式,但其中部分 $ R $、$ S $、$ P $ 已经看不清了。已知看不清的部分由字符 `?` 表示,且整个表达式长度为 $ N $。JOI 先生想知道,将每个 `?` 替换为 $ R $、$ S $、$ P $ 中的任意一个手势,有多少种替换方式能使整个表达式的计算结果等于给定值 $ A $。由于该数目可能非常大,因此要求输出其对 $ 1\,000\,000\,007 $ 取模的结果。 本题所用的文法采用 BNF(巴科斯-瑙尔范式),定义如下。其中,表达式中看不清的部分用 `` 表示: ``` ::= | "+" | "-" ::= | "*" ::= "R" | "S" | "P" | "?" | "(" ")" ``` 以上文法的含义是:一个字符串是 ``,当且仅当它是一个 ``,或是一个 ``、字符 `+`、一个 `` 按顺序连接而成,或是一个 ``、字符 `-`、一个 `` 按顺序连接而成。这是一种递归定义。 给定一个长度为 $ N $ 的字符串 $ E $(其中包含若干 `?`),以及目标结果 $ A $,请编写程序,计算将每个 `?` 替换为 $ R $、$ S $、$ P $ 中的任意一个手势后,能使表达式计算结果为 $ A $ 的替换方案总数,并输出该总数对 $ 1\,000\,000\,007 $ 取模的结果。

输入格式

输入通过标准输入以如下格式给出: $ N $ $ E $ $ A $

输出格式

在标准输出中,输出一行,表示将每个 `?` 替换为 $ R $、$ S $、$ P $ 中的任意一个手势后,能使表达式计算结果等于 $ A $ 的方案总数,对 $ 1\,000\,000\,007 $ 取模的结果。

说明/提示

### 样例 1 解释 将两个 `?` 分别替换为 $ R $、$ S $、$ P $ 中的任意一个手势,使得表达式计算结果为 $ S $ 的方法共有以下 6 种: - $ S + R - (R + R) * P $ - $ S + R - (R + S) * P $ - $ S + S - (R + R) * P $ - $ S + S - (R + S) * P $ - $ S + P - (R + R) * P $ - $ S + P - (R + S) * P $ ### 数据范围 - $ 1 \le N \le 200\,000 $。 - $ E $ 是长度为 $ N $ 的字符串。 - $ E $ 是题目中定义的 ``。 - $ A $ 是字符 `'R'`、`'S'` 或 `'P'` 之一。 ### 子任务 1. (20 分)$ N \le 15 $。 2. (20 分)$ N \le 200 $。 3. (60 分)无额外限制。 翻译由 Qwen3-235B 完成