QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 32 MB Total points: 10

#11037. 问题 [A]

Statistics

有一天,Bytour 国王为他的儿子们发明了一个游戏。他向他的顾问、巫师 Bytelean 描述了这个游戏:

我命令我的三个儿子(编号为 1, 2, 3)站成一排,并给他们每人戴上一顶金冠或银冠。儿子 1 可以看到儿子 2 和儿子 3 的皇冠,儿子 2 可以看到儿子 3 的皇冠。每个儿子都知道总共最多有两顶金冠。之后,我问儿子 1 是否知道他皇冠的颜色。他回答说不知道。之后,我问儿子 2 是否知道他皇冠的颜色。他也回答说不知道。

此时,Bytelean 打断了 Bytour,并说他已经知道王子 3 得到了什么皇冠。Bytour 问他是怎么知道的。他回答道:

如果王子 1 看到两顶金冠,他就会知道自己戴的是银冠(因为最多只有两顶金冠)。他回答了“不知道”,所以这种情况不可能发生。现在,如果王子 2 看到第三位王子头上戴着金冠,他就会知道自己戴的是银冠——否则王子 1 就会回答“知道”。所以他也不知道。因此,可以确定王子 3 戴的是银冠。

你的任务是实现一个(相当)通用的此类情况模拟器。国王可以询问王子和巫师的事实(在上述情况中是皇冠的类型)被编码为一系列变量。其中一些变量与之前的变量有关,而其余变量仅已知其取值范围。关于待解决问题的更详细描述包含在“输入格式”一节中。

编写一个程序:

  • 从标准输入读取情况描述,
  • 计算巫师应该给出的答案,
  • 将结果写入标准输出。

输入格式

输入的第一行包含三个整数 $P$、$V$ 和 $A$,由单个空格分隔。$P$ 表示王子数量(编号从 $1$ 到 $P$),$V$ 表示变量数量(编号从 $1$ 到 $V$),$A$ 表示动作数量。你可以假设以下不等式成立:$1 \le P \le 10$,$1 \le V \le 600$,$1 \le A \le 600$。

接下来的 $V$ 行描述变量 $v_1, v_2, \ldots, v_V$。每一行格式为 "$Z_i$ $A_i$ $B_i$"(包含单个空格),其中 $Z_i$ 是字符 =, +, -, *, /, %, > 之一,$A_i$ 和 $B_i$ 是整数。根据 $v_i$ 描述中出现的 $Z_i$,提供关于该变量的不同事实。可能字符的含义描述如下:

动作 描述
= A_i B_i $v_i$ 是 $A_i$ 到 $B_i$ 之间的整数(此时满足 $-1\,000\,000 \le A_i \le B_i \le 1\,000\,000$)
+ A_i B_i $v_i = v_{A_i} + v_{B_i}$(在此及后续情况中,满足 $1 \le A_i, B_i < i$)
- A_i B_i $v_i = v_{A_i} - v_{B_i}$
* A_i B_i $v_i = v_{A_i} \cdot v_{B_i}$
/ A_i B_i $v_i = v_{A_i} / v_{B_i}$(除法的整数部分)
% A_i B_i $v_i = v_{A_i} \bmod v_{B_i}$(余数)
> A_i B_i 若 $v_{A_i} > v_{B_i}$ 则 $v_i = 1$;否则 $v_i = 0$

这些信息在游戏开始时提供给所有王子以及巫师。

接下来的 $A$ 行描述动作。动作类型如下(动作描述包含单个空格):

  • S g n:$v_n$ 的值被揭示给儿子 $g$。该值被揭示给该儿子的事实被揭示给所有王子和巫师(这并不意味着他们被告知了该值本身)。
  • T g n:国王询问儿子 $g$ 是否知道 $v_n$ 的值。他回答了“是”,国王将此答案传达给巫师(其他儿子只有在执行动作 A 时才会听到该答案——因此他们中的几个人可以“同时”回答问题,且其中一些人的答案不会被其他人使用)。
  • N g n:与上述动作相同,但国王收到的回答是“否”。
  • X g n:与上述动作相同,但国王没有将答案传达给巫师,而是要求巫师猜测答案。巫师回答“是”、“否”或“不知道”(“不知道”意味着巫师不确定该儿子是否知道国王问题的答案)。在此动作期间,国王不告知巫师王子 $g$ 的实际答案。国王也不将巫师的答案传达给王子。警告!巫师的答案以波兰语输出。
  • A 0 0:所有儿子都被告知其他所有儿子对之前国王提出的所有问题的回答(在 TNX 动作中给出的答案)。在此动作中,国王也不告知巫师他在 X 类型动作中收到的答案。
  • M w n:国王告诉巫师变量 $v_n$ 的值为 $w$。
  • Q 0 n:国王询问巫师根据他当前的知识,$v_n$ 可能有哪些值。国王不将巫师的答案传达给王子。

假设王子和巫师都进行完美推理,这意味着在任何时刻,他们都能推导出国王在游戏开始时揭示的限制以及游戏迄今为止发生的事情所隐含的所有事实。此外,他们每个人都知道所有人都在进行完美推理。

数据范围:满足 $1 \le P \le 10$,$1 \le V \le 600$,$1 \le A \le 600$。此外,所有可能性的数量(即所有类型为 = 的变量的 $B_i - A_i + 1$ 的乘积)不超过 600。在每种理论上可能的变量赋值中,每个变量的绝对值不超过 1,000,000,且在 /% 操作中,$v_{A_i}$ 非负且 $v_{B_i}$ 为正。变量 $v_X$ 仅在 $X < Y$ 时才能出现在 $v_Y$ 的定义中。

输出格式

对于每个 Q 类型的动作,应输出一行,包含 $v_n$ 的所有可能值,从小到大排列,以单个空格分隔。对于每个 X 类型的动作,应输出一行,包含 TAK(意为是)、NIE(意为否)或 NIE WIEM(意为不知道)。答案应按照动作在输入中出现的顺序输出;该顺序与动作类型无关。

样例

输入 1

3 7 16
= 0 1
= 0 1
= 0 1
+ 1 2
+ 3 4
= 3 3
> 6 5
S 1 7
S 2 7
S 3 7
M 1 7
S 1 3
S 2 3
S 1 2
X 3 3
X 1 1
N 1 1
A 0 0
N 2 2
X 3 3
A 0 0
X 3 3
Q 0 3

输出 1

NIE
NIE WIEM
NIE
TAK
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.