#5029. Problem 1. Logical Moos
Problem 1. Logical Moos
Problem 1. Logical Moos
USACO 2024 US Open Contest, Bronze
Farmer John 有一个布尔语句,包含 个关键字(, 为奇数)。奇数位置仅出现 或 ,偶数位置上仅出现 或 。
一个 形式的短语,其中 和 为 或 ,而 为 或 ,按如下规则求值:
- :如果 和 均为 true,则求值结果为 true,否则为 false。
- :如果 或 为 true,则求值结果为 true,否则为 false。
在求值该语句时,FJ 必须考虑 Moo 语言中的运算符优先级。与 C++ 类似, 优先级高于 。更具体地说,在求值该语句时,重复以下步骤直至该语句仅包含一个关键字。
- 如果语句中包含 ,选择其中任意一个,并将其周围的短语替换为其求值结果。
- 否则,该语句包含 。选择其中任意一个,并将其周围的短语替换为其求值结果。
可以证明,如果在指定的一个步骤中可以求值多个短语,那么选择哪一个求值并不重要;该语句最终的求值结果将始终相同。
FJ 有 ()个询问。在每个询问中,他给你两个整数 和 (, 和 均为奇数),并删除关键字 到关键字 之间的段。反过来,他希望用一个简单的 或 替换他刚刚删除的段,以使整个语句的求值结果为某个指定的布尔值。帮助 FJ 判断是否可行!
输入格式(从终端 / 标准输入读入):
输入的第一行包含 和 。
下一行包含 个字符串,为一个合法的布尔语句。
以下 行,每行包含两个整数 和 ,以及一个字符串 或 ,表示他希望整个语句的求值结果为 true 还是 false。
输出格式(输出至终端 / 标准输出):
输出一个长度为 的字符串,其中如果第 个询问的结果为可能,则第 个字符为 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
我们来分析第一个询问:
如果我们删除段 并替换为 ,那么整个语句将变为:
true and true or true
我们对位置 处的 关键字求值,得到
true or true
由于我们没有剩下的 关键字,我们必须求值 关键字。求值结束后,余下的是
true
可以证明,如果我们用 替换该段,该语句仍将求值为 ,因此我们输出 N,因为该语句不可能求值为 。
对于第二个询问,我们可以将段 替换为 ,整个语句将求值为 ,因此我们输出 Y。
对于第三个询问,由于 是整个语句,我们可以将其替换为任意内容,因此我们输出 Y。
输入样例:
13 4 false or true and false and false and true or true and false 1 5 false 3 11 true 3 11 false 13 13 true
输出样例:
YNYY
测试点性质: 测试点 3-5:。测试点 6-8:。测试点 9-26:没有额外限制。
供题:Chongtian Ma