这是一道交互题。
在 AutoLab 平台上有一台奇怪的
每个整数会存储在连续的
假设
假设存在
学生可以通过有限次的询问获得和
小 Z 是一名聪明绝顶的学生,因而他尝试使用他的
任务
本题仅支持 C++。
你需要包含头文件 datalab.h
。
你不需要,也不应该实现主函数,你只需要实现如下一个函数:
std::vector<int> solve(int k,int m)
:- 传入数字的是计算机的字长
和询问次数限制 。 - 你需要返回一个大小为
的vector
,其第 个元素代表你确定的 的值。
- 传入数字的是计算机的字长
你可以通过如下函数调用 Autolab 上的加法操作。
std::bitset<8192> Add(std::bitset<8192> x,std::bitset<8192> y)
:- 给定两个大小为
的 bitset, 每个 bitset 自低位向高位阅读的结果代表了一个长度为 的仅包含 01 的字符串。 - 返回一个大小为
的 bitset, 表示 的值。返回的格式和输入的格式相同。
- 给定两个大小为
根据题目要求,你至多只能询问 Add
函数。
评测时,交互库会恰好调用 solve
一次。
本题保证所使用的数组 sgn
在开始之前已经完全确定,不会根据和你的程序的交互过程动态构造,因此题目中的交互操作都是确定性的,你不需要关心这些操作在交互库中的具体实现。
数据保证在调用次数限制下,交互库运行所需的时间不超过 1s;交互库使用的内存大小固定,且不超过 128MB。
如何测试你的程序
试题目录下的 grader.cpp
是我们提供的交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。
- 你需要在本题目录下使用如下命令编译得到可执行程序:
g++ grader.cpp sample.cpp -o sample -O2 -lm
- 对于编译得到的可执行程序:
- 可执行文件将从标准输入读入以下格式的数据:
- 第一行包含两个整数
。 - 接下来一行
个整数,第 个数字表示 。
- 第一行包含两个整数
- 读入完成之后,交互库将调用恰好一次函数
你的函数正确返回后,交互库会判断你的计算是否正确,若正确则会输出Correct
和交互函数调用次数相关信息,否则会输出相应的错误信息。
- 可执行文件将从标准输入读入以下格式的数据:
试题目录下有出题人提供的一份参考代码 sample.cpp
,注意这份代码 不保证可以通过所有的测试用例 。
样例一、二
见附件下载。
这两个样例满足可执行程序的输入格式,因而可以直接输入到可执行程序中。
数据范围
子任务 | ||
---|---|---|
1 | ||
2 | ||
3 |
评分方式
对于任意一个子任务中的数据,如果在某一个数据上选手返回了错误的答案,或者是超出了询问次数限制,得分为
否则假设在子任务内所有测试点中,询问次数的最大值为
Subtask
Subtask
Subtask
换而言之,当且仅当
选手在本题为本题三个子任务的得分之和。
hack
hack 数据的格式与样例 grader 的输入格式一致。
时间限制:
空间限制: