#1232. 【USACO-202403-BRONZE】Logical Moos
【USACO-202403-BRONZE】Logical Moos
Farmer John的布尔语句问题
问题描述
Farmer John 有一个布尔语句,包含 N
个关键字(1 ≤ N < 2·10^5
,N
为奇数)。奇数位置仅出现 true
或 false
,偶数位置上仅出现 and
或 or
。
一个 x OPERATOR y
形式的短语,其中 x
和 y
为 true
或 false
,而 OPERATOR
为 and
或 or
,按如下规则求值:
x and y
:如果x
和y
均为true
,则求值结果为true
,否则为false
。x or y
:如果x
或y
为true
,则求值结果为true
,否则为false
。
在求值该语句时,FJ 必须考虑 Moo 语言中的运算符优先级。与 C++ 类似,and
优先级高于 or
。更具体地说,在求值该语句时,重复以下步骤直至该语句仅包含一个关键字。
- 如果语句中包含
and
,选择其中任意一个,并将其周围的短语替换为其求值结果。 - 否则,该语句包含
or
。选择其中任意一个,并将其周围的短语替换为其求值结果。
可以证明,如果在指定的一个步骤中可以求值多个短语,那么选择哪一个求值并不重要;该语句最终的求值结果将始终相同。
FJ 有 Q
(1 ≤ Q ≤ 2·10^5
)个询问。在每个询问中,他给你两个整数 l
和 r
(1 ≤ l ≤ r ≤ N
,l
和 r
均为奇数),并删除关键字 l
到关键字 r
之间的段。反过来,他希望用一个简单的 true
或 false
替换他刚刚删除的段,以使整个语句的求值结果为某个指定的布尔值。帮助 FJ 判断是否可行!
输入格式
- 输入的第一行包含
N
和Q
。 - 下一行包含
N
个字符串,为一个合法的布尔语句。 - 以下
Q
行,每行包含两个整数l
和r
,以及一个字符串true
或false
,表示他希望整个语句的求值结果为true
还是false
。
输出格式
- 输出一个长度为
Q
的字符串,其中如果第i
个询问的结果为可能,则第i
个字符为Y
,否则为N
。
样例
5 7
false and true or true
1 1 false
1 3 true
1 5 false
3 3 true
3 3 false
5 5 false
5 5 true
NYYYNYY
询问分析
第一个询问
如果我们删除段 [1,1]
并替换为 true
,那么整个语句将变为:
true and true or true
我们对位置 2
处的 and
关键字求值,得到:
true or true
由于我们没有剩下的 and
关键字,我们必须求值 or
关键字。求值结束后,余下的是:
true
可以证明,如果我们用 false
替换该段,该语句仍将求值为 true
,因此我们输出 N
,因为该语句不可能求值为 false
。
第二个询问
对于第二个询问,我们可以将段 [1,3]
替换为 true
,整个语句将求值为 true
,因此我们输出 Y
。
第三个询问
对于第三个询问,由于 [1,5]
是整个语句,我们可以将其替换为任意内容,因此我们输出 Y
。
来源
一本通在线评测