在使用n
灯泡的情况下,首先,所有灯泡都关闭并且m
开关,每个开关控制灯泡l
至r
(包括两端)的范围>
我们需要确定是否可以随时使用m
开关中的任何一个来打开所有灯泡。
如果可以,答案可以为是,如果不能,答案为否。
例如,首先给定n
,然后给定m
,然后接下来的m
行给出开关控制的范围。在下面的示例n = 5
和m = 2
中。
5 2
1 2
3 5
这里的答案是肯定的,因为2个开关可以控制所有灯泡。并可以将其打开。
第二个例子
5 2
1 2
3 4
这里的答案是否定的,因为其中一个灯泡不受任何开关的控制。
我所做的是声明一个大小为m
的数组计数,如果计数总和等于(r-l +1)
,那么我为每个开关计算由n
控制的灯泡数量,然后是否则没有。
但是只有示例测试用例通过了,其余所有都失败了。
注意:范围可能相交
如果范围相交,例如
1 3
3 5
答案是否定的,因为当转动第三只灯泡上的第二个开关时,它会从打开转到关闭
所以答案是否定的。
答案 0 :(得分:1)
我们可以将此问题视为实例XOR-SAT问题,尽管它比此处提出的问题更为笼统,但这是一种解决方法。
为了获得一些直觉,我提供了一个非常简单的示例。假设您有三个开关和三个灯泡的系统,如下所示:
S B
1 1, 3 // toggles bulbs 1 and 3
2 1, 2
3 1, 2, 3
具有以下我们想要满足的公式:
(x 1 ^ x 2 ^ x 3 )&(x 1 ^ x 2 )&(x 1 ^ x 3 )。
现在我们要满足这个公式。我们首先将其写为布尔模的模2的系统:
|1 1 1| |x_1| |1|
|0 1 1| * |x_2| = |1| mod 2
|1 0 1| |x_3| |1|
现在用Gaussian elimination解决。
首先,将第一行和第二行添加到第三行:
1 1 1 1 1 1 1 1
0 1 1 1 -> 0 1 1 1
1 0 1 1 0 0 1 1 // for RHS, 1+1+1 = 1 mod 2
第二个后替换项:x 1 = 0,x 2 = 0,x 3 = 1,这显然是答案
所以,这里的主要复杂度是编写高斯消去过程。