QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 512 MB 總分: 100

#8472. 多数元素

统计

Little Cat 最近学习了布尔电路。现在他想构造一个多数电路。

布尔变量 $x_1, \dots, x_n$ 上的电路是一个有向无环图,其中每个节点(逻辑门)要么是一个标记为变量 $x_i$ 的输入节点,要么是一个标记为逻辑运算 $\lor$ 或 $\land$ 的运算节点。电路中恰好有 $n$ 个输入节点,每个输入变量 $x_1, \dots, x_n$ 对应一个。此外,电路中选定一个节点作为输出。

每个节点计算一个输出:输入节点(标记为变量)输出其上所写的变量值,标记为 $\lor$(或 $\land$)的节点输出所有输入节点的逻辑或(或逻辑与)。注意,禁止使用逻辑非(NOT)节点。请参阅样例和说明以获得更好的理解。

输入节点的入度为 0。运算节点的入度至少为 1,且可以任意大。出度可以是任意值(可能为 0)。

为方便起见,有两个特殊的常量节点 $T$(真)和 $F$(假),它们分别始终输出 1 和 0。

多数电路 $Maj_n$ 有 $n$ 个输入 $x_1, \dots, x_n$,如果至少有一半的输入为 1,则输出 1,否则输出 0。形式化地,$Maj_n(x_1, \dots, x_n) = [2\sum_{i=1}^n x_i \ge n]$。

定义电路的深度为电路中最长(有向)路径的长度,即最长路径上的边数。

你能帮助 Little Cat 构造一个深度不超过 14 的 $n$ 输入多数电路吗?

输入格式

输入包含一行,包含一个整数 $n$ ($2 \le n \le 64$),表示输入节点的数量。

输出格式

第一行必须包含一个整数 $m$ ($1 \le m \le 5 \cdot 10^4$),表示标记为 $\lor$ 或 $\land$ 的节点数量,因此电路中总共有 $n + m + 2$ 个节点。输入节点 $x_1, \dots, x_n$ 的编号为 $1, \dots, n$。常量真节点 $T$ 的编号为 1,常量假节点 $F$ 的编号为 2。

接下来必须有 $m$ 行。第 $i$ 行必须按以下格式之一描述节点 $(n + i)$:

  • “OR $k_i$ $a_1$ $a_2$ $\dots$ $a_{k_i}$”(不含引号):节点 $(n + i)$ 计算节点 $a_j$ 的逻辑或,其中 $2 \le a_j < n + i$ 且 $a_j \neq 0$,对于所有 $1 \le j \le k_i$。
  • “AND $k_i$ $a_1$ $a_2$ $\dots$ $a_{k_i}$”(不含引号):节点 $(n + i)$ 计算节点 $a_j$ 的逻辑与,其中 $2 \le a_j < n + i$ 且 $a_j \neq 0$,对于所有 $1 \le j \le k_i$。

对于某些 $u \neq v$,允许 $a_u = a_v$。你必须保证 $\sum_{i=1}^m k_i \le 2 \cdot 10^5$,且电路的深度不超过 14。

电路的输出选定为节点 $n + m$ 的输出。

为了检查你构造的电路,Little Cat 将对你的电路进行 1500 轮测试。在每一轮中,Little Cat 将生成一个任意输入 $x_1, \dots, x_n$(他不会说明具体生成方式),并用该输入测试你的电路。如果你的电路正确输出了输入 $x_1, \dots, x_n$ 的多数值,则通过该轮测试。你需要通过全部 1500 轮测试。

样例

输入 1

4

输出 1

9
AND 2 1 2
AND 2 1 3
AND 2 1 4
AND 2 2 3
AND 2 2 4
AND 2 3 4
AND 3 5 5 6
AND 1 7
OR 6 5 6 7 8 9 10

说明

样例输出打印了一个计算 $Maj_4$ 的深度为 2 的电路。电路 $Maj_4(x_1, x_2, x_3, x_4)$ 当且仅当至少有两个输入节点为 1 时输出 1。因此,你可以计算每对输入节点的逻辑与,并输出这些与运算结果的逻辑或。

以下是关于电路节点的一些说明: 节点 1、2、3 和 4 是输入节点。 节点 5、6、7、8、9 和 10 计算某些输入节点的逻辑与。 节点 11 和 12 是冗余节点。 节点 13 是输出节点。 * 常量节点 $T$ 和 $F$ 未在图中画出。

在此,只要满足约束条件($1 \le m \le 5 \cdot 10^4$,$ \sum k_i \le 2 \cdot 10^5$,深度 $\le 14$),冗余节点的存在不会影响电路的有效性。

在测试期间,以下展示了一种可能的情况: 输入节点设置为 $x_1 = 1, x_2 = 0, x_3 = 0, x_4 = 1$。 因此,节点 $x_5, \dots, x_{13}$ 的输出为: $x_5 = x_1 \text{ AND } x_2 = 1 \text{ AND } 0 = 0$ $x_6 = x_1 \text{ AND } x_3 = 1 \text{ AND } 0 = 0$ $x_7 = x_1 \text{ AND } x_4 = 1 \text{ AND } 1 = 1$ $x_8 = x_2 \text{ AND } x_3 = 0 \text{ AND } 0 = 0$ $x_9 = x_2 \text{ AND } x_4 = 0 \text{ AND } 1 = 0$ $x_{10} = x_3 \text{ AND } x_4 = 0 \text{ AND } 1 = 0$ $x_{11} = x_5 \text{ AND } x_5 \text{ AND } x_6 = 0 \text{ AND } 0 \text{ AND } 0 = 0$ $x_{12} = x_7 = 1$ * $x_{13} = x_5 \text{ OR } x_6 \text{ OR } x_7 \text{ OR } x_8 \text{ OR } x_9 \text{ OR } x_{10} = 0 \text{ OR } 0 \text{ OR } 1 \text{ OR } 0 \text{ OR } 0 \text{ OR } 0 = 1$

电路的输出为 $x_{13} = 1$,这是 $\{1, 0, 0, 1\}$ 的多数值。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.