「JZOI-2」填问卷

题目背景

团员们满脑子都是办周年庆,但小僖只想摸鱼。 于是小僖打开了他心爱的游戏。

题目描述

玩了这么久这款游戏了,今天小僖想参加活动,填一下问卷来看看自己对这款游戏的了解程度。 问卷上一共有 $n$ 道判断题,可怜的小僖发现自己一题也不会,他决定问一下他的队友来解决。 他的队友是游戏的一位资深用户,他全部题都会做,所以小僖决定向队友求助。具体的,小僖每次都会以以下格式询问: `int ask(int m,vector<int> w,vector<bool> ans)` 其中 $m$ 表示这一次询问的题目的总数,$w_i$ 表示询问的第 $i$ 题的题目编号(你需要保证单次询问的 $w_i$ 互不相同,毕竟队友很没有耐心),$ans_i$ 表示小 X 认为的第 $i$ 题的正确答案($0\le i<m$)。队友会告诉他这次他有多少题**答对**了。 例如,现在有三道题,如果答案分别是 $\{0,1,1\}$,小 $X$ 现在调用 `ask(2,[1,3],[1,1])`,那么返回值为 $1$,因为第一道题答错了,第三道题答对了。 由于题目有点多,小僖需要你写一个程序来帮助他得到所有题的正确答案。 你不需要实现主函数,你现在只需要实现 `vector<bool> work(int n)`,返回值是题目 $1\sim n$ 的答案,考虑到 `vector<bool>` **下标从 0 开始**,所以你需要将你的答案数组**左移 1 位。** 当然,询问很费劲,所以小僖希望询问次数越少越好,询问次数的评分标准会在提示说明中给出。另外,虽然每一次询问的题目数没有限制,但你还是要注意,如果询问题目数过多,你可能会获得 **TLE**,题目保证每次询问的时间复杂度是 $O(m)$ 的。 为了方便,这里用 $1$ 表示选对,$0$ 表述选错。

输入输出格式

输入格式


样例数据属于第一部分,按照以下格式输入: $n\\a_{1...n}$ 其中 $a_i$ 表示第 $i$ 题的正确答案。

输出格式


下面给出`grader.cpp`的错误信息 $\text{Wrong[x]}$: 1. 询问中的 $w_i$ 大于 $n$ 或小于 $1$。 2. 询问中出现了相同的 $w_i$。 3. 询问中 $m$ 和 $w$ 或 $ans$ 的长度不匹配。 4. 答案错误或返回数组格式不正确。 之后,`grader.cpp`会返回你的询问次数。

输入输出样例

输入样例 #1

3
0 0 1

输出样例 #1

2

说明

### 样例解释 下面给出一种 $2$ 次的可行的询问方案 `ask(1,[2],0)`,返回值为 $1$,表明第二题的答案是 $0$. `ask(2,[1,3],[0,1])`,返回值为 $2$,~~这也许是因为运气太好,一蒙就对~~,所以可以得出第一题和第三题的答案分别是$0,1$。 于是你可以返回 $\{0,0,1\}$ 了,这时询问次数为 $2$。 当然,如果第二次询问结果是 $1$,那么你就不能直接得出答案了,所以,蒙题有风险。 ### 数据范围 对于所有数据,保证 $n\le2^{17}$。 问卷的出题人为了保证用户们答题的质量,为了防止用户做判断题一蒙全对,他会精心构造每一道题的答案。 当然,这里保证答案在问卷出好后就已经存在,不会根据你的询问来构造。 对于每组数据假设你询问了 $Q$ 次,下面给出评分标准。 | $Q$ 的取值范围 | 得分 | | :----------: | :----------: | | $(2^{17},+\infty)$ | $0$ | | $2^{17}$ | $10$ | | $(64000,2^{17})$ | $\min(90,\lfloor\frac{2^{17}-Q}{2^{16}}\times100\rfloor)$ | | $(63000,64000]$ | $95$ | | $[0,63000]$ | $100$ | 注意,本题有多组测试点,得分取所有数据中测出的得分最少的那组数据。 实现细节:请务必加上 `extern "C"`,你可以选择补全 `problem.cpp` 中的函数中的内容,当然也可以自己实现。编译的时候直接编译和运行 `grader.cpp` 即可。 温馨提示:如果你的乱搞做法打得太劣,虽然你的询问次数小于 $2^{17}$,但你的得分可能小于 $10$ 分。