P8899 [USACO22DEC] Reverse Engineering B
题目描述
Elsie 有一个程序,接受一个 $N(1 \le N \le 100)$ 个变量的数组 $b[0], \cdots ,b[N−1]$ 作为输入,其中每个变量等于 $0$ 或 $1$,并且返回对输入数组应用一系列 `if / else if / else` 语句的结果。每个语句检查至多一个输入变量的值,并返回 $0$ 或 $1$。这类程序的一个例子是:
```cpp
if (b[1] == 1) return 1;
else if (b[0] == 0) return 0;
else return 1;
```
例如,如果上方程序的输入是 "10"(即 $b[0]=1$ 及 $b[1]=0$),那么输出应当为 $1$。
Elsie 告诉了 Bessie 对于 $M(1 \le M \le 100)$ 个不同输入的正确输出。Bessie 现在正试图对 Elsie 的程序进行逆向工程。不幸的是,Elsie 可能说了谎;可能不存在上述形式的程序行为与 Elsie 所说的均一致。
对于 $T(1 \le T \le 10)$ 个子测试用例中的每一个,判断 Elsie 是否一定在说谎。
输入格式
无
输出格式
无
说明/提示
### 样例 1 解释
以下是第一个子测试用例的一个合法的程序:
```cpp
if (b[0] == 0) return 0;
else return 1;
```
以下是第一个子测试用例的另一个合法的程序:
```cpp
if (b[0] == 1) return 1;
else return 0;
```
以下是第二个子测试用例的一个合法的程序:
```cpp
if (b[1] == 1) return 1;
else if (b[0] == 0) return 0;
else return 1;
```
显然,对于第三个子测试用例不存在对应的合法的程序,因为 Elsie 的程序一定始终对相同的输入产生相同的输出。
可以证明对于最后一个子测试用例不存在对应的合法的程序。
### 测试点性质
- 测试点 $2-3$ 满足 $N=2$。
- 测试点 $4-5$ 满足 $M=2$。
- 测试点 $6-12$ 没有额外限制。