#P13681. [IAMOI R2] 逻辑推理

    ID: 14479 远端评测题 3800ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>动态规划 DP洛谷原创O2优化洛谷月赛bitset

[IAMOI R2] 逻辑推理

题目背景

小 A 最近迷上了逻辑推理,所以小 B 给他出了一道题。

题目描述

小 B 的题目可以抽象成下面的形式。

题目一共有 nn 个逻辑变量 A1An[1]A_1\sim {A_n}^{[1]}mm 个推理规则,以及 qq 个询问。

其中,推理规则均形如 Si[ATi=true]S_i\Rightarrow[A_{T_i} = \texttt{true}],且 Ti[1,n]T_i\in[1,n]

SiS_i 满足下面的限制:

  1. SiS_i 用后缀表达式给出,而且各个子串用空格隔开。

  2. SiS_i 是一个合法的表达式[2]^{[2]}

比如说,A1 A2 & A3 | 就是一个合法的 SiS_i

同时,定义 Si|S_i|SiS_i字符串的个数。

定义一次推理:若当前的 AA 能使 SiS_i 为真[3]^{[3]},得出 ATi=trueA_{T_i}=\texttt{true}

接下来有 qq互相独立的询问。每次询问给定推理的初始条件,即若干个 ii 满足 Ai=trueA_i=\texttt{true}。问最少需要几次推理才可以推出 Ax=trueA_x=\texttt{true}。如果无解,请输出 -1


对题目部分内容的解释:

[1][1]:逻辑变量:指只有真值或假值的变量,你可以认为 C++ 中的 bool 是一种逻辑变量。

[2][2]:合法的表达式:

  1. 单个变量是合法的表达式(在输入中形如 Ax\texttt{Ax},如 A1\texttt A1A114\texttt A114)。

  2. AABB 都是合法的表达式,则 A B |A\ B\ \texttt{|}A B &A\ B\ \texttt{\&} 都是合法的表达式。

[3][3]:怎样的 AA 才能使 SiS_i 为真?

  1. SiS_i 中的 Ax\texttt{Ax} 替换成 AxA_x 的真假值。需要注意的是,这样并不会真正修改 SiS_i。比方说,A1 A2 | A3 &A=(true,false,true)A=(\texttt{true},\texttt{false},\texttt{true}) 的时候 SiS_i 就会被替换成 true false | true &

  2. 将替换过后的 SiS_i 进行表达式计算,其中:

  • | 表示逻辑或、& 表示逻辑与。

  • 将原来的表达式按照后缀表达式计算。

  1. 最后的结果(true\texttt{true} 或者 false\texttt{false})就代表了当前的 AA 能否满足 SiS_i

输入格式

本题有多组测试数据。

输入的第一行包含一个整数 TT,表示测试数据的组数。

接下来包含 TT 组数据,每组数据的格式如下:

第一行包含三个整数 n,m,qn,m,q

接下来 2m2m 行为 mm 个推理规则:

  • 2i2i 行包含两个数 Si,Ti|S_i|,T_i

  • 2i+12i+1 行包含 Si|S_i| 个字符串,表示 SiS_i

接下来 qq 行为 qq 次询问,每次询问给定一个字符串 ss 和一个整数 xx。其中 xx 表示需要推出的条件,s=n|s|=n 且:

  • 如果 si=1s_i=\texttt{1},那么 Ai=trueA_i=\texttt{true}

  • 如果 si=0s_i=\texttt{0},那么 Ai=falseA_i=\texttt{false}

输出格式

对于每组测试数据输出 qq 行,每行包含一个整数,表示询问的答案。

2
4 4 3
7 4
A1 A2 | A2 A3 | &
5 2
A1 A3 A4 & |
5 1
A2 A3 & A4 |
1 1
A1
1010 4
1101 2
1000 4
3 0 2
100 1
100 2
1
0
2
0
-1

提示

【样例解释】

对于第 11 个询问,直接运用第一个推理规则即可。

对于第 33 个询问,按顺序运用第 22 和第 11 个推理规则即可。

【数据范围】

本题采用捆绑测试。

q\sum q 表示单个测试点中 qq 的和。

Subtask\text{Subtask} nn\le mm\le Si\vert S_i\vert\le q\sum q\le 分值
11 1010 100100 1010
22 1515 3030 10001000 2020
33 1818 100100 5×1055\times10^5 3030
44 2020 4040

对于所有的测试数据,保证:1T101\le T\le 101n201\le n\le 201m,Si1001\le m,|S_i|\le 1001q5×1051\le \sum q\le 5\times10^5

【提示】

本题输入量较大,请使用较快的输入方式。