#L4163. 「JOI Open 2024」考试 2

    ID: 3407 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>表达式解析分段函数二分查找递归下降离线处理2024JOI

「JOI Open 2024」考试 2


4163. 「JOI Open 2024」考试 2

时间限制:2000 ms
内存限制:1024 MiB

题目描述

译自 JOI Open 2024 T1 「試験 2 / Examination 2」

JOI 君就读的 IOI 高中计划在近期举行期末考试。考试的内容是能否正确地计算出 IOI 高中自己制定的规则下的 IOI 函数 的值。
IOI 函数是指由以下 66 种规则中的任意一种得到的字符串,它们可以把 1110910^{9} 之间的整数对应到 TrueFalse 的真假值。

  1. 1110910^{9} 之间的整数 aa 写成 [a] 的形式,就是一个 IOI 函数(其中,a 是用十进制表示 aa 得到的字符串)。这个 IOI 函数把大于等于 aa 的整数对应到 True,把小于 aa 的整数对应到 False
  2. 如果 f 是一个 IOI 函数,那么 (f) 也是一个 IOI 函数。这个 IOI 函数把 f 对应到 True 的整数对应到 True,把 f 对应到 False 的整数对应到 False
  3. 如果 f 是一个 IOI 函数,那么 !f 也是一个 IOI 函数。这个 IOI 函数把 f 对应到 True 的整数对应到 False,把 f 对应到 False 的整数对应到 True
  4. 如果 fg 都是 IOI 函数,那么 f&g 也是一个 IOI 函数。这个 IOI 函数把 fg 都对应到 True 的整数对应到 True,把其他的整数对应到 False
  5. 如果 fg 都是 IOI 函数,那么 f^g 也是一个 IOI 函数。这个 IOI 函数把 fg 中只有一个对应到 True 的整数对应到 True,把其他的整数对应到 False
  6. 如果 fg 都是 IOI 函数,那么 f|g 也是一个 IOI 函数。这个 IOI 函数把 fg 中至少有一个对应到 True 的整数对应到 True,把其他的整数对应到 False

如果一个 IOI 函数可以由多个规则得到,那么就按照规则的编号越大越优先的原则来确定 IOI 函数对应的真假值。
例如,对于 [1]&[2]|[3],就按照规则 66 来处理,把 f=[1]&[2]g=[3],而不是按照规则 44 来处理,把 f=[1]g=[2]|[3]
另外,对于规则 445566,要尽量让 f 的长度更长。
例如,对于 [4]^[5]^[6],就按照规则 55 来处理,把 f=[4]^[5]g=[6],而不是按照规则 55 来处理,把 f=[4]g=[5]^[6]

JOI 君为了考试复习,准备了一个长度为 NN 的 IOI 函数 SS,想要练习计算出 QQ 个整数 X1,X2,,XQX_{1}, X_{2}, \ldots, X_{Q} 对应的这个函数的真假值。于是,他请擅长处理 IOI 函数的你来帮他做一个参考答案。

给定 N,Q,SN, Q, SX1,X2,,XQX_{1}, X_{2}, \ldots, X_{Q},请你编写一个程序,求出 JOI 君准备的 IOI 函数对 X1,X2,,XQX_{1}, X_{2}, \ldots, X_{Q} 的真假值。


输入格式

  • 第一行两个整数 N,QN, Q
  • 接下来一行,包含一个字符串 SS
  • 接下来 QQ 行,每行一个整数 XiX_i

输出格式

输出 QQ 行。第 ii (1iQ)(1 \leq i \leq Q) 行输出 JOI 君准备的 IOI 函数对整数 XiX_{i} 的真假值。


样例 1

输入

15 5
(![2]|[3])&![4]
1
2
3
4
5

输出

True
False
True
False
False

解释

按照问题文中的规则得到 SS 的过程中出现的一部分 IOI 函数,它们对各个 Xi(1iQ)X_{i}(1 \leq i \leq Q) 的真假值如下表所示。

| XiX_{i} | ![2] | [3] | ![2]|[3] | ![4] | (![2]|[3])&![4] | |---------|--------|-------|-------------|---------|-------------------| | 1 | True | False | True | True | True | | 2 | False | False | False | True | False | | 3 | False | True | True | True | True | | 4 | False | True | True | False | False | | 5 | False | True | True | False | False |


样例 2

输入

20 4
(!![23])^((([116])))
54
1
200
89

输出

True
False
False
True

这组样例满足子任务 3,6,73,6,7 的限制。


样例 3

输入

32 4
[2]|[5]&[1]|(([1000000000])|[7])
4
10
6
1

输出

True
True
True
False

这组样例满足子任务 3,4,6,73,4,6,7 的限制。


数据范围与提示

对于所有输入数据,满足:

  • 1N1061 \leq N \leq 10^6
  • 1Q2×1051 \leq Q \leq 2\times 10^5
  • SS 是一个长度为 NN 的 IOI 函数
  • 1Xi1091 \leq X_{i} \leq 10^{9} (1iQ)(1 \leq i \leq Q)
  • NN, QQXiX_{i} (1iQ)(1 \leq i \leq Q) 都是整数

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
1 SS 不包含 & 和 ` `
2 Q=1Q=1 20
3 N10000N \leq 10000 10
4 SS 不包含 !^ 6
5 SS 在得到的过程中,如果应用了规则 44 或规则 66,那么 fg 中至少有一个是由规则 11 得到的 IOI 函数 12
6 N4×105N \leq 4\times 10^5 20
7 无附加限制 27