P16706 [SEATST 2026] 三重电路 / Triple Circuit
题目描述
这是一道提交答案题(output-only)。
你在为机器人实现电路时,你注意到了一些异常。机器人可能运行 $N = 128$ 个程序,编号从 $0$ 到 $N - 1$ 。正常情况下,在任何给定时刻,应该 **只有** 一个程序(在 $N$ 个程序中)在运行。然而,由于某些未知原因,有时恰好有三个程序同时运行。幸运的是,作为一名经验丰富的程序员,你知道如何处理这种情况,并决定实现一个电路来 **检测** 这些异常。
你首先创建 $N$ 个输入。如果第 $i$ 个程序没有运行,则第 $i$ 个输入为 $0$ ,否则为 $1$ 。然后,你在电路中添加强逻辑门,它们的索引从 $N$ 开始连续编号。每个逻辑门可以接受给定数量的输入并产生一个输出,输出为 $0$ 或 $1$ 。第 $i$ 个逻辑门的输入可以是索引小于 $i$ 的任何逻辑门的输出,或者是初始 $N$ 个输入中的任意一个。
有三种类型的逻辑门:
- `NOT` :恰好接受一个输入。如果输入为 $0$ ,则输出为 $1$ ,否则输出为 $0$ 。
- `OR` :恰好接受两个输入。如果两个输入均为 $0$ ,则输出为 $0$ ,否则输出为 $1$ 。
- `AND` :恰好接受两个输入。如果两个输入均为 $1$ ,则输出为 $1$ ,否则输出为 $0$ 。
如果检测到异常——也就是说,前 $N$ 个输入中恰好有三个为 $1$ ——最后一个逻辑门的输出应该是 $1$ ;如果前 $N$ 个输入中恰好有一个为 $1$ ,则输出应该为 $0$ 。
保证前 $N$ 个输入中 $1$ 的数量要么恰好是一个,要么恰好是三个。
输入格式
无
输出格式
你需要将描述 $N = 128$ 电路的信息写入输出文件中(output file)。
输出的第一行应包含一个整数,表示使用的逻辑门数量。
输出中其余的每一行应为以下三种格式之一:
NOT in_1
OR in_1 in_2
AND in_1 in_2
它们分别追加一个 `NOT`、 `OR` 或 `AND` 门。对于 `NOT` , `in_1` 是该逻辑门输入的索引。对于 `OR` 和 `AND` , `in_1` 和 `in_2` 是该逻辑门输入的索引。在第一行后的第 $i$ 行追加的逻辑门索引为 $N - 1 + i$ 。
逻辑门的总数不应超过 $1024$ 。换句话说,输出文件中的行数不应超过 $1025$ 。
说明/提示
### 样例
考虑一个简化版本的任务, $N = 4$ (注意,你只需要提供 $N = 128$ 的解决方案)。一种可能的解决方案是构建以下电路。
```
3
OR 0 1
OR 2 3
AND 4 5
```
该电路包含:
- 逻辑门 $4$ ,如果输入 $0$ 或 $1$ 中至少有一个为 $1$ ,则输出 $1$ ;
- 逻辑门 $5$ ,如果输入 $2$ 或 $3$ 中至少有一个为 $1$ ,则输出 $1$ ;以及
- 逻辑门 $6$ ,如果逻辑门 $4$ 和逻辑门 $5$ 的输出均为 $1$ ,则输出 $1$ 。
可以验证,对于所有可能的输入,该电路都能给出正确的答案。
### 子任务
- ($100$ 分) 没有额外约束。
### 评分方式
对于每个子任务,如果存在电路无法通过的情况(也就是说你所设计的电路无法成功检查出异样),你的得分将为 $0$ 。
否则,令 $K$ 表示电路使用的逻辑门数量。你的得分将是 $f(K) \times [\text{该子任务的分数}]$ ,其中:
$$
\begin{aligned}
f(K) =
\begin{cases}
0 & 1024 < K \\
0.3 - 0.1 \times \frac{K - 384}{896} & 384 < K \le 1024 \\
0.6 - 0.3 \times \frac{K - 256}{128} & 256 < K \le 384 \\
1 - 0.40 \times \frac{K - 215}{41} & 215 < K \le 256 \\
1 & K \le 215
\end{cases}
\end{aligned}
$$