#P13777. 【PR #16】CD Shuffle
【PR #16】CD Shuffle
题目描述
请在程序开头添加 shuffle.h
下发文件
这是一道交互题。
你购买了一套包含 集【数据删除】的 CD 套装。每张 CD 都有一个标签编号 到 ,但 CD 内实际存储的剧集编号与标签编号不匹配。已知:
- 所有剧集 到 都存在且不重复
- CD 标签编号 到 与剧集编号是一个排列关系
你需要通过若干轮交互,确定每个 CD 标签对应的实际剧集编号,每一轮交互的流程如下:
-
分组阶段:将 张 CD 分成 个盒子,每个盒子包含 张 CD(保证 )
-
发送阶段:将分组后的 CD 发送给朋友小 L
- 盒子之间的顺序会被打乱
- 每个盒子内的 CD 顺序也会被打乱
-
接收阶段:小 L 会:
- 查看每个盒子中 CD 的实际剧集编号
- 将结果以任意顺序返回(不保留原始分组信息)
你最多可以进行 次这样的交互,交互完成后,你需要确定每个 CD 标签对应的剧集编号。
交互方式与实现细节
你需要实现以下函数:
vector<int> solve(int N, int B, int K, int Q, int ST)
其中, 表示 subtask 的 ID。
你需要返回一个 vector,其中第 个数表示标签编号为 的 CD 的实际剧集编号。
在交互过程中,你可以调用如下函数:
vector<vector<int>> shuffle(vector<vector<int>> boxes)
参数说明:
boxes:一个 的二维数组,表示当前分组方案- 返回值:一个 的二维数组,表示每个盒子中 CD 的实际剧集编号(顺序随机)
注意事项:
- 调用
shuffle次数不能超过 次 - 每次调用
shuffle时,必须提供合法的分组方案( 个盒子,每个盒子 张 CD,且包含所有 到 的 CD 标签)
样例
初始条件:
- , , ,
- 实际剧集编号对应关系:(即标签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]
样例1
6 2 3 100 1
5 4 2 3 1 6
数据范围与约定
对于所有数据,有:
子任务:
| 子任务编号 | 特殊性质 | 分值 |
|---|---|---|
| $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$ |
:子任务 有部分分,令 为你的最大询问次数:
- : 分
- : 分
- : 分
- : 分
- : 分
相关
在下列比赛中: