QOJ.ac

QOJ

Limite de temps : 3 s Limite de mémoire : 1024 MB Points totaux : 100 Communication

#17703. 多重通信 2

Statistiques

K 先生为 JOI 决赛的选手准备了一个游戏。K 先生秘密持有一个 $N \times N$ 的表格 $A$,其中每个单元格都包含一个非负整数。令 $A_{i,j}$ 表示从顶部起第 $(i+1)$ 行($0 \le i \le N - 1$)和从左侧起第 $(j+1)$ 列($0 \le j \le N - 1$)的单元格中填写的整数。表格 $A$ 满足以下条件:

  • 对于每个满足 $0 \le i \le N - 1$ 的 $i$,都有 $A_{i,i} = 0$。
  • 对于每个满足 $0 \le i < j \le N - 1$ 的 $i, j$,都有 $A_{i,j} = A_{j,i}$。

考虑一个具有 $N$ 个顶点的加权无向图,其中顶点 $i$ 和顶点 $j$($0 \le i < j \le N - 1$)之间的边权重为 $A_{i,j}$。令 $X$ 为该图的最小生成树的权重。换句话说,$X$ 是通过以下过程获得的值。游戏的目标是让所有选手合作并确定 $X$ 的值。

  1. 令 $x = 0$。
  2. 考虑一个具有 $N$ 个顶点的无向图 $G$。$G$ 的顶点编号为 $0, 1, \dots, N-1$。最初,$G$ 没有边。
  3. 重复以下操作 $N - 1$ 次。令 $X$ 为这 $N - 1$ 次操作后的 $x$ 值。 i. 将当前可以通过某些边从顶点 $0$ 到达的 $G$ 的顶点称为近顶点,将其他顶点称为远顶点。选择一对由一个近顶点 $i$ 和一个远顶点 $j$ 组成的对 $(i, j)$,使得值 $A_{i,j} \times N^2 + i \times N + j$ 最小化。可以证明,至少存在一个近顶点和一个远顶点,并且 $(i, j)$ 是唯一确定的。 ii. 将连接顶点 $i$ 和顶点 $j$ 的边添加到 $G$ 中。 iii. 更新 $x \leftarrow x + A_{i,j}$。

定义 $R = \lfloor 5120/N \rfloor$(其中 $\lfloor x \rfloor$ 表示不超过 $x$ 的最大整数)。JOI 决赛共有 $R \times N$ 名选手,分为 $R$ 组,每组 $N$ 名选手。组号为 $0$ 到 $R - 1$,第 $r$ 组($0 \le r \le R - 1$)的选手编号为 $(r, 0), (r, 1), \dots, (r, N - 1)$。

游戏通过重复以下轮次进行,顺序为第 $0, 1, 2, \dots$ 轮,最多 $R$ 轮。在游戏过程中,选手之间不允许交流,但他们可以提前共享策略。

第 $r$ 轮($0 \le r \le R - 1$)按如下方式进行:

  • 对于 $i = 0, 1, \dots, N - 1$,按此顺序,K 先生和选手 $(r, i)$ 进行以下交互。
    1. K 先生向选手 $(r, i)$ 提供以下信息:
      • 选手的编号 $(r, i)$,
      • 表格 $A$ 中第 $(i+1)$ 行的信息,即 $A_{i,0}, A_{i,1}, \dots, A_{i,N-1}$,
      • 整数 $B_{r,i,0}, B_{r,i,1}, \dots, B_{r,i,N-1}$,每个整数都是 $0$ 到 $2^{64}-1$(含)之间的整数,由上一轮的选手发送给选手 $(r, i)$。
        • 如果 $r > 0$,这些整数由下述交互 3 确定。
        • 如果 $r = 0$,则为方便起见,定义 $B_{r,i,0} = B_{r,i,1} = \dots = B_{r,i,N-1} = 0$。
    2. 如果选手 $(r, i)$ 能够确定 $X$ 的值,他们向 K 先生回答该值。如果有任何选手给出了答案,游戏立即结束。
    3. 对于每个 $j = 0, 1, \dots, N - 1$,选手 $(r, i)$ 确定一个整数 $B_{r+1, j, i}$(必须是 $0$ 到 $2^{64}-1$ 之间的整数),发送给选手 $(r+1, j)$,并告知 K 先生。即使在 $r = R-1$ 时,选手 $(r+1, j)$ 不存在,选手 $(r, i)$ 也必须确定 $B_{r+1, j, i}$ 并告知 K 先生。

如果回答的 $X$ 值不正确,或者在第 $R-1$ 轮结束时没有人回答 $X$ 的值,则游戏失败。如果在第 $R-1$ 轮结束时回答了正确的 $X$ 值,则游戏成功。使用的轮数越少,得分越高(如果在第 $r$ 轮给出了答案,则轮数计为 $r+1$)。

请为选手实现一种策略,使游戏在尽可能少的轮数内成功。

实现细节

你的提交必须包含 multi.h,并使用 #include 预处理指令,且必须实现以下函数:

std::vector<unsigned long long> strategy(int N, int r, int i,
std::vector<unsigned long long> A, std::vector<unsigned long long> B)
  • 参数 $N$ 表示表格 $A$ 的行数和列数。
  • 参数 $r$ 和 $i$ 表示选手编号 $(r, i)$。
  • 参数 $A$ 是一个长度为 $N$ 的非负整数序列,其中 $A[j]$($0 \le j \le N - 1$)表示表格 $A$ 中从顶部起第 $(i+1)$ 行、从左侧起第 $(j+1)$ 列的单元格中填写的整数 $A_{i,j}$。
  • 参数 $B$ 是一个长度为 $N$ 的非负整数序列,其中 $B[j]$($0 \le j \le N - 1$)表示从选手 $(r-1, j)$ 发送给选手 $(r, i)$ 的整数 $B_{r,i,j}$。如果 $r = 0$,则 $B[j] = 0$。
  • 此函数必须返回一个长度为 $1$ 或 $N$ 的非负整数序列,表示选手 $(r, i)$ 根据参数 $A, B$ 中的信息所采取的行动。如果返回的序列长度不是 $1$ 或 $N$,则提交被判定为 Wrong Answer [1]。
    • 要回答 $X$ 的值为 $x$,此函数必须返回一个长度为 $1$ 的序列,即 $(x)$。如果回答的值不正确,提交被判定为 Wrong Answer [2]。
    • 如果不给出答案,此函数必须返回一个长度为 $N$ 的序列 $B'$。
      • 对于每个 $j = 0, 1, \dots, N - 1$,$B'[j]$ 表示选手 $(r, i)$ 发送给选手 $(r+1, j)$ 的整数 $B_{r+1, j, i}$。它必须是 $0$ 到 $2^{64}-1$ 之间的整数。注意,即使在 $r = R-1$ 且选手 $(r+1, j)$ 不存在时,$B'$ 的长度仍必须为 $N$。
    • 在第 $R-1$ 轮结束时,至少有一名选手必须给出答案。如果没有选手给出答案,提交被判定为 Wrong Answer [3]。
  • 此函数的返回值必须仅由其参数决定。特别注意,返回值不得依赖于之前对 strategy 的调用或运行时随机性。如果此函数对相同的参数返回不同的值,提交被判定为 Wrong Answer [4]。
  • 保证给定的参数在通过某种表格 $A$ 和提交的函数策略进行游戏时确实可能发生。但是,请注意,调用不一定按第 $0, 1, \dots, R-1$ 轮的顺序进行。
  • 评测机将在单次执行中进行一场或多场游戏。在单次执行中,此函数最多被调用 $10\,240$ 次。

说明

  • 你可以自由实现其他函数或声明全局变量以供内部使用。
  • 你提交的程序不得以任何方式与标准输入、标准输出或任何其他文件通信。但是,允许将调试信息等输出到标准错误输出。

数据范围

  • $2 \le N \le 256$。
  • $0 \le A_{i,j} < 2^{48}$($0 \le i \le N - 1, 0 \le j \le N - 1$)。
  • $A_{i,i} = 0$($0 \le i \le N - 1$)。
  • $A_{i,j} = A_{j,i}$($0 \le i < j \le N - 1$)。
  • $N$ 和 $A_{i,j}$($0 \le i \le N - 1, 0 \le j \le N - 1$)均为整数。

子任务

  1. (5 分) $N \le 64, A_{i,j} \le 1$($0 \le i \le N - 1, 0 \le j \le N - 1$)。
  2. (10 分) $A_{i,j} \le 1$($0 \le i \le N - 1, 0 \le j \le N - 1$)。
  3. (15 分) $N \le 64$。
  4. (40 分) $A_{i,j} < 2^{20}$($0 \le i \le N - 1, 0 \le j \le N - 1$)。
  5. (15 分) $A_{i,j} < 2^{40}$($0 \le i \le N - 1, 0 \le j \le N - 1$)。
  6. (15 分) 无附加限制。

评分

如果在子任务的测试用例中,即使有一个被判定为 Wrong Answer [1]–[4]、Time Limit Exceeded、Memory Limit Exceeded 或 Runtime Error,该子任务的得分也为 0。否则,令 $S$ 为该子任务中所有游戏所使用的最大轮数。则该子任务的得分确定如下:

对于子任务 3:

  • 无论 $S$ 的值如何,该子任务的得分均为该子任务分数的 100%。如果 $S > 6$,竞赛网站可能会显示“输出部分正确”,但这不影响得分。

对于子任务 3 以外的子任务:

  • 如果 $S \le 6$,该子任务的得分均为该子任务分数的 100%。
  • 如果 $7 \le S \le 9$,该子任务的得分均为该子任务分数的 $(100 - 20 \cdot (S - 6))\%$。
  • 如果 $10 \le S \le 19$,该子任务的得分均为该子任务分数的 $(40 - S)\%$。
  • 如果 $20 \le S$,该子任务的得分均为该子任务分数的 20%。

样例

样例输入 1

1
3
1 2
3

样例输出 1

Accepted: 2

说明 1

以下是样例评测机读取的输入以及相应的函数调用序列:

调用 strategy 返回值
strategy(3, 0, 0, [0, 1, 2], [0, 0, 0]) [0, 1, 2]
strategy(3, 0, 1, [1, 0, 3], [0, 0, 0]) [3, 4, 5]
strategy(3, 0, 2, [2, 3, 0], [0, 0, 0]) [6, 7, 8]
strategy(3, 1, 0, [0, 1, 2], [0, 3, 6]) [3]

在第 0 轮中,发生以下交互: 选手 $(0, 0)$ 没有回答 $X$ 的值,并向选手 $(1, 0)$ 发送 $B_{1,0,0} = 0$,向选手 $(1, 1)$ 发送 $B_{1,1,0} = 1$,向选手 $(1, 2)$ 发送 $B_{1,2,0} = 2$。 选手 $(0, 1)$ 没有回答 $X$ 的值,并向选手 $(1, 0)$ 发送 $B_{1,0,1} = 3$,向选手 $(1, 1)$ 发送 $B_{1,1,1} = 4$,向选手 $(1, 2)$ 发送 $B_{1,2,1} = 5$。 * 选手 $(0, 2)$ 没有回答 $X$ 的值,并向选手 $(1, 0)$ 发送 $B_{1,0,2} = 6$,向选手 $(1, 1)$ 发送 $B_{1,1,2} = 7$,向选手 $(1, 2)$ 发送 $B_{1,2,2} = 8$。

由于没有选手回答 $X$ 的值,游戏进入下一轮。

在第 1 轮中,发生以下交互: * 选手 $(1, 0)$ 从选手 $(0, 0)$ 接收到 $B_{1,0,0} = 0$,从选手 $(0, 1)$ 接收到 $B_{1,0,1} = 3$,从选手 $(0, 2)$ 接收到 $B_{1,0,2} = 6$,并回答 $X = 3$。由于 $X$ 的值已被回答,游戏在此时结束。

因为回答的 $X$ 值正确,游戏成功。该游戏使用的轮数为 2。此样例输入满足子任务 3、4、5 和 6 的限制。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download
#1369EditorialOpen题解Milmon2026-04-01 21:38:05View

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.