Public Judge

pjudge

Time Limit: 2 s Memory Limit: 512 MB Total points: 100

#21946. 【PR #16】CD Shuffle

Statistics

题目描述

这是一道交互题。

你购买了一套包含 $N$ 集小马宝莉的 CD 套装。每张 CD 都有一个标签编号 $1$ 到 $N$,但 CD 内实际存储的剧集编号与标签编号不匹配。已知:

  1. 所有剧集 $1$ 到 $N$ 都存在且不重复
  2. CD 标签编号 $1$ 到 $N$ 与剧集编号是一个排列关系

你需要通过若干轮交互,确定每个 CD 标签对应的实际剧集编号,每一轮交互的流程如下:

  1. 分组阶段:将 $N$ 张 CD 分成 $B$ 个盒子,每个盒子包含 $K$ 张 CD(保证 $N = B \times K$)
  2. 发送阶段:将分组后的 CD 发送给朋友小 L
    • 盒子之间的顺序会被打乱
    • 每个盒子内的 CD 顺序也会被打乱
  3. 接收阶段:小 L 会:
    • 查看每个盒子中 CD 的实际剧集编号
    • 将结果以任意顺序返回(不保留原始分组信息)

你最多可以进行 $Q$ 次这样的交互,交互完成后,你需要确定每个 CD 标签对应的剧集编号。

交互方式与实现细节

你需要实现以下函数:

vector<int> solve(int N, int B, int K, int Q, int ST)

其中,$ST$ 表示 subtask 的 ID。

你需要返回一个 vector,其中第 $i$ 个数表示标签编号为 $i$ 的 CD 的实际剧集编号。

在交互过程中,你可以调用如下函数:

vector<vector<int>> shuffle(vector<vector<int>> boxes)

参数说明:

  • boxes:一个 $B \times K$ 的二维数组,表示当前分组方案
  • 返回值:一个 $B \times K$ 的二维数组,表示每个盒子中 CD 的实际剧集编号(顺序随机)

注意事项:

  1. 调用 shuffle 次数不能超过 $Q$ 次
  2. 每次调用 shuffle 时,必须提供合法的分组方案($B$ 个盒子,每个盒子 $K$ 张 CD,且包含所有 $1$ 到 $N$ 的 CD 标签)

样例

初始条件:

  • $N=6$, $B=3$, $K=2$, $Q=100$
  • 实际剧集编号对应关系:$[3,1,4,5,2,6]$(即标签1→剧集3,标签2→剧集1,...)

交互过程:

  • 调用 shuffle([[1,2],[3,4],[5,6]])
    • 可能返回 [[6,2],[5,4],[3,1]]
  • 调用 shuffle([[2,6],[3,1],[5,4]])
    • 可能返回 [[6,1],[2,5],[4,3]]
  • 调用 shuffle([[6,5],[4,2],[3,1]])
    • 可能返回 [[5,1],[3,4],[2,6]]

正确输出:

  • 返回 [3,1,4,5,2,6]

数据范围与约定

对于所有数据,有:

  • $B,K\geq 2$
  • $N\geq 6$
  • $N=B\times K$

子任务:

子任务编号 特殊性质 分值
$1$ $N=6$, $B=2$, $K=3$, $Q=100$ $2$
$2$ $N=6$, $B=3$, $K=2$, $Q=100$ $3$
$3$ $N \leq 1000$, $Q=12$,保证返回结果时盒子顺序不变 $15$
$4$ $N \leq 1000$, $K=2$, $Q=4$ $20$
$5$ $N \leq 1000$, $B=2$, $Q=12$ $20$
$6^{*}$ $N \leq 1000$, $Q=2000$, $B,K>2$ $40$

$*$ :子任务 $6$ 有部分分,令 $q$ 为你的最大询问次数:

  • $q > 2000$:$0$ 分
  • $500 < q \leq 2000$:$6$ 分
  • $50 < q \leq 500$:$15$ 分
  • $9 < q \leq 50$:$15 + 25 \times (\frac{50-q}{41})^2$ 分
  • $q \leq 9$:$40$ 分
About Issues

We understand that our problem archive is not perfect. If you find any issues with the problem, including the statement, scoring configuration, time/memory limits, test cases, etc.

You may use this form to submit an issue regarding the problem. A problem moderator will review your issue and proceed it properly.

STOP! Before you submit an issue, please READ the following guidelines:

  1. This is not a place to publish a discussion, editorial, or requests to debug your code. Your issue will only be visible by you and problem moderators. Other users will not be able to view or reply your issues.
  2. Do not submit duplicated issues. If you have already submitted one, please wait for an moderator to review it. Submitting multiple issues will not speed up the review process and might cause your account to be banned.
  3. Issues must be filed in English or Chinese only.
  4. Be sure your issue is related to this problem. If you need to submit an issue regarding another problem, contest, category, etc., you should submit it to the corresponding page.

Active Issues 0

No issues in this category.

Closed/Resolved Issues 0

No issues in this category.