luogu#P7848. 「JZOI-2」填问卷
「JZOI-2」填问卷
题目背景
团员们满脑子都是办周年庆,但小僖只想摸鱼。
于是小僖打开了他心爱的游戏。
题目描述
玩了这么久这款游戏了,今天小僖想参加活动,填一下问卷来看看自己对这款游戏的了解程度。
问卷上一共有 道判断题,可怜的小僖发现自己一题也不会,他决定问一下他的队友来解决。
他的队友是游戏的一位资深用户,他全部题都会做,所以小僖决定向队友求助。具体的,小僖每次都会以以下格式询问:
int ask(int m,vector<int> w,vector<bool> ans)
其中 表示这一次询问的题目的总数, 表示询问的第 题的题目编号(你需要保证单次询问的 互不相同,毕竟队友很没有耐心), 表示小 X 认为的第 题的正确答案()。队友会告诉他这次他有多少题答对了。
例如,现在有三道题,如果答案分别是 ,小 现在调用 ask(2,[1,3],[1,1])
,那么返回值为 ,因为第一道题答错了,第三道题答对了。
由于题目有点多,小僖需要你写一个程序来帮助他得到所有题的正确答案。
你不需要实现主函数,你现在只需要实现 vector<bool> work(int n)
,返回值是题目 的答案,考虑到 vector<bool>
下标从 0 开始,所以你需要将你的答案数组左移 1 位。
当然,询问很费劲,所以小僖希望询问次数越少越好,询问次数的评分标准会在提示说明中给出。另外,虽然每一次询问的题目数没有限制,但你还是要注意,如果询问题目数过多,你可能会获得 TLE,题目保证每次询问的时间复杂度是 的。
为了方便,这里用 表示选对, 表述选错。
输入格式
样例数据属于第一部分,按照以下格式输入:
其中 表示第 题的正确答案。
输出格式
下面给出grader.cpp
的错误信息 :
- 询问中的 大于 或小于 。
- 询问中出现了相同的 。
- 询问中 和 或 的长度不匹配。
- 答案错误或返回数组格式不正确。
之后,grader.cpp
会返回你的询问次数。
3
0 0 1
2
提示
样例解释
下面给出一种 次的可行的询问方案
ask(1,[2],0)
,返回值为 ,表明第二题的答案是 .
ask(2,[1,3],[0,1])
,返回值为 ,这也许是因为运气太好,一蒙就对,所以可以得出第一题和第三题的答案分别是。
于是你可以返回 了,这时询问次数为 。
当然,如果第二次询问结果是 ,那么你就不能直接得出答案了,所以,蒙题有风险。
数据范围
对于所有数据,保证 。
问卷的出题人为了保证用户们答题的质量,为了防止用户做判断题一蒙全对,他会精心构造每一道题的答案。
当然,这里保证答案在问卷出好后就已经存在,不会根据你的询问来构造。
对于每组数据假设你询问了 次,下面给出评分标准。 | 的取值范围 | 得分 | | :----------: | :----------: | | | | | | | | | $\min(90,\lfloor\frac{2^{17}-Q}{2^{16}}\times100\rfloor)$ | | | | | | |
注意,本题有多组测试点,得分取所有数据中测出的得分最少的那组数据。
实现细节:请务必加上 extern "C"
,你可以选择补全 problem.cpp
中的函数中的内容,当然也可以自己实现。编译的时候直接编译和运行 grader.cpp
即可。
温馨提示:如果你的乱搞做法打得太劣,虽然你的询问次数小于 ,但你的得分可能小于 分。