题目描述
这是一道交互题。
你购买了一套包含 $N$ 集小马宝莉的 CD 套装。每张 CD 都有一个标签编号 $1$ 到 $N$,但 CD 内实际存储的剧集编号与标签编号不匹配。已知:
- 所有剧集 $1$ 到 $N$ 都存在且不重复
- CD 标签编号 $1$ 到 $N$ 与剧集编号是一个排列关系
你需要通过若干轮交互,确定每个 CD 标签对应的实际剧集编号,每一轮交互的流程如下:
- 分组阶段:将 $N$ 张 CD 分成 $B$ 个盒子,每个盒子包含 $K$ 张 CD(保证 $N = B \times K$)
- 发送阶段:将分组后的 CD 发送给朋友小 L
- 盒子之间的顺序会被打乱
- 每个盒子内的 CD 顺序也会被打乱
- 接收阶段:小 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 的实际剧集编号(顺序随机)
注意事项:
- 调用
shuffle次数不能超过 $Q$ 次 - 每次调用
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$ 分